在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数据