0

以下脚本设置(例如)ListItem 位置 1 的颜色,但它也为数字 12 (11+1) 提供了漂亮的灰色。这是Android中的某种错误吗?

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    ListView.setSelection(arg2);
    arg1.setBackgroundColor(Color.LTGRAY);
    adapter.notifyDataSetChanged();
}
4

2 回答 2

1

ListView回收(重用)视图。所以你需要将背景颜色与数据相关联,而不是视图!然后,getView()您就有机会根据数据正确设置背景颜色。

于 2013-10-30T16:37:43.600 回答
0

@David Wasser 是正确的......单元格重用导致多个列表视图行以灰色背景绘制。

但是,如果您尝试根据 SELECTION STATE 设置背景,请考虑以下技术:

// set single or multi-select on your list (CHOICE_MODE_SINGLE = single row selectable)
// do this in onCreate
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
.
.
.
// in your onItemClick, set the checked state of the item
// you DO NOT need to call notifyDataSetChanged
listView.setItemChecked(position, true);

并且,将列表视图单元格布局的背景设置为内置或自定义选择器

内置:

android:background="?android:attr/activatedBackgroundIndicator"

风俗:

android:background="@drawable/myListBackground"

可绘制/myListBackground.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@color/lightgray" />
    <item android:drawable="@color/transparent" />
</selector>

关键是 state_activated 条目,将在选择/选中项目时使用。您还可以为其他状态指定颜色,上面的示例引用了 colors.xml 表中的颜色。

有关这方面的更多详细信息,请查看“?android:attr/activatedBackgroundIndicator”如何工作?

于 2013-10-30T16:55:34.777 回答