【问题标题】:Using ListView of CheckedTextViews with a filter使用带有过滤器的 CheckedTextViews 的 ListView
【发布时间】:2011-06-21 21:49:58
【问题描述】:

我正在尝试编写一个充满 CheckedTextViews 的 ListView 并使用过滤器让用户快速搜索 ListView (由具有自定义 ArrayAdapter 的数组支持)。我已经设定 XML 中声明 listview 和 I 的 multipleChoice 标志 不使用过滤器时可以选中/取消选中多个条目。什么时候 使用过滤器搜索条目,我可以选择一个条目。 但是,当我清除过滤器(通过按退格键)时,条目位于 即使它不再是相同的位置 我要检查的实际条目。

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

有没有人幸运地实现了这样的事情或有任何 推荐?

谢谢 亚当

【问题讨论】:

    标签: android listview checkedtextview


    【解决方案1】:

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

    它还维护一个已检查的 id 列表,您可以使用 ListView#getCheckedItemIds() 检索它,并且只要您的适配器具有稳定的 id(即,特定的 id 总是指的是相同的概念项目,并且随着项目的顺序或过滤而变化),您可以在过滤更改时使用它来恢复选中的位置(您必须迭代整个适配器才能匹配将 id 提高到位置)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 2021-07-11
        • 2016-11-20
        • 2013-04-19
        相关资源
        最近更新 更多