【发布时间】:2011-12-14 01:13:35
【问题描述】:
我遇到了与这个问题相同的问题:Wrong item checked when filtering ListView in android
正如上面问题中所建议的,我有一个包含所有 selectedIds 的 Hashset,但是当光标重新填充选中的项目时,我不知道如何使用它。
我的问题只是表面问题 - 例如:
- “Facebook”在未过滤列表中位于第 5 位。
- 用户搜索“人脸”,只有“Facebook”出现在过滤列表的第 1 位。
- 用户选中“Facebook”并返回未过滤列表。
- 选中的项目是列表中的第 1 项,而不是“Facebook”(位于第 5 位)。
注意: 除了这个问题,其他一切都很好。 例如,“删除”会删除正确的项目,因为我使用 selectedIds 来执行此操作(即使选中的项目是错误的)。
单击列表项:
OnItemClickListener mOnItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//gets the Bookmark ID of selected position
Cursor cursor = (Cursor)parent.getItemAtPosition(position);
String bookmarkID = cursor.getString(0);
boolean currentlyChecked = checkedStates.get(position);
checkedStates.set(position, !currentlyChecked);
if (!selectedIds.contains(bookmarkID)) {
selectedIds.add(bookmarkID);
selectedLines.add(position);
} else {
selectedIds.remove(bookmarkID);
selectedLines.remove(position);
}
}
};
光标内部:- 这就是问题所在。
这会重新填充已检查的项目 - 问题是它按位置 (pos) 执行此操作,并且该项目在过滤列表中的正确位置是什么,而不是它在未过滤列表中的位置 - 导致错误标记的项目。
CheckedTextView markedItem = (CheckedTextView) row.findViewById(R.id.btitle);
markedItem.setChecked(checkedStates.get(pos));
不胜感激!
【问题讨论】: