1

我正在尝试编写一个充满 CheckedTextViews 的 ListView,并使用过滤器来允许用户快速搜索 ListView(由具有自定义 ArrayAdapter 的数组支持)。我在声明列表视图的 XML 中设置了 multipleChoice 标志,并且在不使用过滤器时可以选中/取消选中多个条目。使用过滤器搜索条目时,我可以选择一个条目。但是,当我清除过滤器(通过按退格键)时,即使它不再是我想要检查的实际条目,同一位置的条目仍处于选中状态。

我尝试在适配器的 getView() 方法中手动设置 CheckedTextView 的选中状态,但这似乎不起作用。只是为了笑,我尝试在 ListView 中的 每个CheckedTextView 中将 isChecked 设置为 false,但是在使用过滤器时检查的 CheckedTextView 仍然处于选中状态。

有没有人有幸实施这样的事情或有任何建议?

谢谢亚当

4

2 回答 2

4

您可能想查看ListView#clearChoices()。ListView 本身根据适配器项的位置而不是项的 id 维护选择。因此,如果位置发生变化(例如,通过过滤),则选择位置基本上不再有效。

它还维护一个已检查 id 的列表,您可以使用ListView#getCheckedItemIds()检索该列表,并且只要您的适配器具有稳定的 id(即,特定的 id始终引用相同的概念项,并且不会随项目的顺序或过滤),您可以在过滤更改时使用它来恢复检查的位置(您必须迭代整个适配器才能将 id 与位置匹配)。

于 2011-06-21T03:33:34.340 回答
-1

我在看ListView.clearChoices(),但我希望有另一种方法。我要做的是在过滤器更改时调用ListView.clearChoices(),手动跟踪已选择的内容,并从ArrayAdapter.getView()调用ListView.setItemChecked( ) 。这使我不必一直遍历整个列表。

于 2011-06-21T13:49:58.973 回答