在android中过滤ListView时检查了错误的项目

Posted

技术标签:

【中文标题】在android中过滤ListView时检查了错误的项目【英文标题】:Wrong item checked when filtering ListView in android 【发布时间】:2011-01-30 01:51:35 【问题描述】:

我有一个带有多项选择条目的 ListView,其中一些条目从一开始就使用

进行检查
setItemChecked(position, true);

我将它与过滤选项结合起来

setTextFilterEnabled(true)

因此很容易在列表中找到特定条目。

问题是,当我过滤列表时,条目会在列表视图中切换位置。以三个条目为例:“A”、“B”和“C”,其中“C”是事先检查的(即列表中第 3 位的条目)。当我在键盘上键入“C”时,仅显示“C”条目(如预期的那样)。现在不再检查“C”,因为该条目已从列表中的选中位置 3 移动到未选中位置 1。

这种行为会导致应用中出现一些不太受欢迎的效果。有没有办法“通过过滤移动选择”,即将选中状态绑定到条目而不是其在列表中的初始位置?还是我需要寻找新方法?

谢谢,

莱纳斯

【问题讨论】:

遇到同样的问题。我知道这已经很久了,但是您设法解决了这个问题吗? @liorry:我不记得了,但我想我接受了已接受答案中的建议。很久以前:) 哈哈好的。我虽然也许你可以分享代码......我使用了这个建议,但有些东西对我不起作用......哦,好吧,无论如何谢谢;) 【参考方案1】:

维护所选项目的列表,每当重新填充列表时,检查列表中是否存在 id(不是位置),并将其设置为选中。

【讨论】:

【参考方案2】:

是的,这种行为是因为 ListView 将该位置作为对选定项的引用。这意味着即使对于具有稳定 ID 的适配器,选择也绑定到该位置(在您的情况下已被过滤掉)。 正如建议的那样,实现一些自定义映射/集来保存已检查的 ID,并将它们提供给适配器。

【讨论】:

以上是关于在android中过滤ListView时检查了错误的项目的主要内容,如果未能解决你的问题,请参考以下文章

Android listview edittext过滤空间按钮?

在android中的EditText上输入时如何过滤ListView数据

Listview自定义过滤器在过滤列表中单击错误的项目

选中复选框时检查Android listview多个项目

在 Android 应用程序中使用 ListView 按字母顺序过滤 ListAdapter

BaseAdapter Listview过滤Android