我是从同一个问题深受其害这个问题时,错误项检查:Wrong item checked when filtering ListView in android安卓:过滤列表视图
如上问题的建议,我有一个持有的Hashset所有selectedIds,但我想不通了解如何在光标正在重新填充选中的项目时使用它。
我的问题只是化妆品 - 例如:
- “脸谱”位于未过滤列表中的第5位。
- 用户搜索“脸”,只有“Facebook”出现在过滤列表中的第一个位置。
- 用户选中“Facebook”并选回未过滤列表。
- 选中的项目是列表中的第一个项目,而不是“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));
希望得到任何帮助!
我对执行这个有点困惑。我有一个带有listview的SimpleCursorAdapter。你如何初始化checkedStates,selectedIds和selectedLines? 此外,答案中提到的列表/哈希集确定项目是否需要自定义适配器或我可以使用SimpleCursorAdapter? – rohitmishra
@movingahead无法真正在这里发布代码(解决了问题)...要么开始一个新的问题或给我发电子邮件(我的昵称在Gmail),我会尽力帮助。 –
我在这里问了一个新问题http://stackoverflow.com/questions/9399941/implementing-a-listview-with-multiple-select-with-filter-using-a-cursor-adapter如果你能提供帮助,情况会很好。 – rohitmishra