我有一个listview,当用户点击某个项目时会改变该项目的背景颜色,但是我还需要它做的是将视图中的第一个项目设置为具有背景颜色,这样它就是“默认”项目如果用户没有点击任何内容。
我对listview的onclick如下:
list1.setOnItemClickListener(new OnItemClickListener() {
View row = null;
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
imageURL = (String) (list1.getItemAtPosition(position));
if (row != null) {
row.setBackgroundResource(0);
}
row = v;
v.setBackgroundResource(R.color.selected);
}
});
和我当前的列表适配器看起来像:
class MyListAdapter extends ArrayAdapter<String> {
private ArrayList<String> items;
public MyListAdapter(Context context, int textViewResourceId,
ArrayList<String> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.image_row_layout, null);
}
String o = items.get(position);
if (o != null) {
SmartImageView tt = (SmartImageView) v.findViewById(R.id.smallimage);
if (tt != null) {
tt.setImageUrl(o);
}
}
return v;
}
}
答案 0 :(得分:2)
不要在onItemClick中手动更改行的背景,因为当该特定行被回收时,它将显示另一行的背景,该行未被选为您更改它的颜色。
而是为您的背景创建一个具有不同状态的选择器,并使用setItemChecked指示检查哪一行,如果背景应该是不同颜色,则列表视图将进行管理