我有一个 ListView,其中包含一堆具有图标、文本和复选框的项目。
列表行的布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...>
<ImageView
android:id="@+id/list_icon"
... />
<CheckedTextView
android:id="@android:id/text1"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
... />
</LinearLayout>
该列表使用以下方式填写:
ArrayList<HashMap<String, ?>> datalist = new ArrayList<HashMap<String, ?>>();
for (Item item : mItems) {
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("info", item.info);
data.put("icon", item.icon);
datalist.add(data);
}
ListAdapter adapter = new SimpleAdapter(getContext(), datalist, R.layout.list_item,
new String[] { "info", "icon" }, new int[] { android.R.id.text1, R.id.list_icon });
list.setAdapter(adapter);
list.setItemsCanFocus(false);
list.setOnItemClickListener(this);
onItemClick 处理程序如下所示:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView ctv = (CheckedTextView) view.findViewById(android.R.id.text1);
if (ctv != null) {
ctv.setChecked(!ctv.isChecked());
}
}
当我用三个列表项填充应用程序并单击最后一项时,在 Android 2.x 设备上,第一项将被选中,如果我再次单击,最后一项将被选中。每次我单击一个项目并且顺序似乎发生变化时,该列表都会再次填充。
我在 onItemClick 处理程序中检查了交付的 CheckedTextView 是持有我单击的项目的字符串的实际视图,但仍然检查了另一个项目。
知道这里发生了什么吗?我认为这可能是由适配器中的共享视图引起的......(convertView)。如果是这样,我该如何规避这个问题?
提前致谢。