我正在尝试编写一个用CheckedTextViews填充的ListView 并使用过滤器允许用户快速搜索ListView (由具有自定义ArrayAdapter的数组支持)。我已经设定 XML中的multipleChoice标志声明了listview和I. 不使用过滤器时可以选中/取消选中多个条目。什么时候 使用过滤器搜索条目,我可以选择一个条目。 但是,当我清除过滤器(通过按退格键)时,条目位于 相同的位置仍然被检查,尽管它不再是 我要检查的实际条目。
我尝试在CheckedTextView上手动设置检查状态 在适配器的getView()方法中,但似乎不是 工作。只是为了笑容,我尝试将isChecked设置为false ListView中的每个 CheckedTextView,但CheckedTextView表示 在使用过滤器时检查了。
有没有人有任何运气来实现这样或类似的东西 建议?
由于 亚当
答案 0 :(得分:4)
您可能需要查看ListView#clearChoices()。 ListView本身根据适配器项的位置维护选择,而不是项的id。因此,如果位置改变(例如,通过过滤),则选择位置基本上不再有效。
它还会维护一个已检查的ID列表,您可以使用ListView#getCheckedItemIds()检索这些ID,并且只要您的适配器具有稳定的ID(即,特定ID 始终指的是相同的概念项,不随项目的顺序或过滤而变化),您可以使用它来恢复过滤更改时检查的位置(您必须按顺序迭代整个适配器)匹配ID到位置。)
答案 1 :(得分:-1)
我在看ListView.clearChoices(),但我希望还有另一种方式。我最近做的是在更改过滤器时调用ListView.clearChoices(),手动跟踪已选择的内容,并从ListView.setItemChecked()调用ArrayAdapter.getView()。这可以防止我不得不一直遍历整个列表。