gpt4 book ai didi

Android:过滤 ListView 时检查了错误的项目

转载 作者:太空狗 更新时间:2023-10-29 14:29:58 26 4
gpt4 key购买 nike

我遇到了与这个问题相同的问题:Wrong item checked when filtering ListView in android

如上述问题所述,我有一个包含所有 selectedId 的哈希集,但当光标重新填充选中的项目时我无法弄清楚如何使用它。

我的问题只是表面问题 - 例如:

  • “Facebook”位于未过滤列表中的第 5 位。
  • 用户搜索“face”,只有“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不知道数据集变了?在您的适配器上调用 notifyDatSetChanged() 以通知它。

my_adapter.notifyDataSetChanged();

这将使用更新后的数据强制重绘列表。

关于Android:过滤 ListView 时检查了错误的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com