我已经使用BaseAdapter准备了自定义列表视图。现在我想在点击事件中更改listview所选项目的颜色。并且应该选择多个项目。我在这里给出一个演示:
所选项目的颜色为橙色。这只是一个演示屏幕。如果有人知道如何更改所选列表项的整个背景颜色,请发布他们的评论。感谢。
我正在使用这个BaseAdapter类:
public class MyListAdapter extends BaseAdapter {
private Activity activity;
private String[] title, artist, duration, rowNumber;
private static LayoutInflater inflater=null;
ViewHolder holder;
View vi;
public MyListAdapter (Activity context, String[] songTitle,String[] songArtist, String[] songDuration )
{
try
{
activity = context;
title = songTitle;
artist = songArtist;
duration = songDuration;
rowNumber = new String[title.length];
for(int i=0;i<title.length; i++){
rowNumber[i] = Integer.toString(i+1);
}
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
catch (NullPointerException e)
{
e.printStackTrace();
}
}
public int getCount() {
return title.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder{
private TextView txtSongNumber, txtSongTitle, txtSongArtist, txtSongDuration;
}
public View getView(int position, View convertView, ViewGroup parent)
{
try
{
vi=convertView;
// System.out.println("Value of position"+position);
if(convertView==null)
{
vi = inflater.inflate(R.layout.list_songs, null);
holder=new ViewHolder();
holder.txtSongNumber = (TextView)vi.findViewById(R.id.txtSongNumber);
holder.txtSongTitle = (TextView)vi.findViewById(R.id.txtSongTitle);
holder.txtSongArtist = (TextView)vi.findViewById(R.id.txtSongArtist);
holder.txtSongDuration = (TextView)vi.findViewById(R.id.txtSongDuration);
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
holder.txtSongNumber.setText(rowNumber[position]);
holder.txtSongTitle.setText(title[position]);
holder.txtSongArtist.setText(artist[position]);
holder.txtSongDuration.setText(duration[position]);
}
catch (Exception e)
{
e.printStackTrace();
}
return vi;
}
}
答案 0 :(得分:2)
非常简单......只需尝试以下代码......
在列表适配器中:
首先定义一个整数数组
ArrayList<Integer> itemPos = new ArrayList<Integer>();
然后在getView方法中使用此代码:
if (itemPos.contains(position)) {
holder.txtOne.setTextColor(Color.BLUE);
} else {
holder.txtOne.setTextColor(Color.WHITE);
}
现在在文本视图的点击事件中使用此代码:
if (!itemPos.contains(position)) {
holder.txtOne.setTextColor(Color.BLUE);
itemPos.add(position);
notifyDataSetChanged();
} else {
holder.txtOne.setTextColor(Color.WHITE);
notifyDataSetChanged();
int po = itemPos.indexOf(position);
itemPos.remove(po);
}
答案 1 :(得分:0)
由于您已经实现了BaseAdapter,它具有一个名为getView的核心方法,因此您可以轻松地在BaseAdapter中存储项目的状态。例如,您可以使用List来存储状态。
然后,应该实现ListView的监听器,如http://developer.android.com/reference/android/widget/AdapterView.html#setOnClickListener(android.view.View.OnClickListener中所述。 OnItemClickListener的文档位于http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html,您可以通过它获取点击的位置。
最后,在点击事件后更改项目的状态,并在适配器中调用notifyDataSetChanged()以通知数据已更改,并且您将看到更新的所选项目。
答案 2 :(得分:0)
“非常感谢你的帮助。我已经完成了所有这些。现在我发现当我点击列表中的一个项目时,另一个项目也会自动被选中.BaseAdapter有问题吗?”
对于此问题,您需要保存列表视图行的状态,无论是否在getview中选中该行,检查是否已选中,然后将行的颜色设置为选中。无论何时选择或取消选择任何行,都需要保存状态。这是一个类似的例子而不是复选框,行将在你的情况下...希望它会帮助你我给你一个链接....