我有一个ListView,我希望在设置为listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
时将默认的蓝色突出显示更改为自定义图像,不仅在选择/按下该项目时,还要保持此代码选择/按下: / p>
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
v.setBackgroundResource(0);
view.setBackgroundDrawable(getResources().getDrawable(
R.drawable.list_item_highlight_short));
v = view;
}
问题是,如果我的ListView中有20个项目,那么一些不在视图中的项目仍然会突出显示,并且不会包含在v.setBackgroundResource(0);
如何删除ListView中所有项目的BackgroundResource,以便我可以将单击的项目设置为自定义图像背景以指示“已选择”状态?
答案 0 :(得分:2)
尝试覆盖适配器的getView
方法。并且用这种方法做这项工作。
@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.Your_listview_layout, null);
}
if (listview.isItemChecked(position)) {
v.setBackgroundResource(R.drawable.list_item_highlight_short);
} else {
v.setBackgroundResource(0);
}
return super.getView(position, v, parent);
}
答案 1 :(得分:1)
请尝试使用listview的 ListSelecter 属性
例如:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:listSelector="#0000ff" >
</ListView>
答案 2 :(得分:0)
将单击的项目位置存储在适配器中。就像上面的函数adapter.setPosition(position)一样。然后在适配器的getView函数中,检查位置是否被选中,然后相应地更改背景