【问题标题】:Filter ListView with Checkboxes使用复选框过滤 ListView
【发布时间】:2013-01-10 09:29:06
【问题描述】:

我正在使用最新的 Android SDK,我想用CheckBoxes 过滤代表不同植物列表的ListView

在我的列表中,我有 800 个具有不同属性(例如颜色、大小、可食用性)的项目,CheckBoxes 应该以减法方式过滤列表。只有匹配所有属性的列表项/视图应该是可见的 - 所有其他行应该是不可见的(程序应该像www.pilzsuchmaschine.de 上的过滤系统一样工作)。

我尝试修改自定义ArrayAdaptergetView(),但我不知道如何正确执行此操作。有人有解决办法吗?

我的ArrayAdapterthis one 差不多。

【问题讨论】:

  • 也许您可以提供一些您已经尝试过的代码?

标签: android android-listview filtering android-arrayadapter


【解决方案1】:

我试图修改我的自定义 ArrayAdapter 的 getView() 但我没有 得到正确的想法如何正确地做到这一点。有没有人有 解决办法?

您没有在getView() 方法中进行过滤。首先在所有过滤器CheckBoxes 上设置一个OnCheckedChangeListener 以监视它们的状态(每个CheckBoxes 都应该有一个boolean 变量来保持其状态)。当过滤器CheckBox 被选中/取消选中时,更新状态变量,然后过滤ListView。过滤ListView 可以通过两种方式完成,手动或使用专用机制(Filter 类)。

当用户手动检查CheckBox 时,您将获取过滤器CheckBoxes 的所有状态并将它们与植物列表的每个元素进行匹配。与所有CheckBoxes 状态匹配的元素是有效的,应该添加到新列表中。完成后,使适配器指向新创建的列表并调用notifyDataSetChanged()。我不会采用这种方法,因为您有很多项目。

正确的方法是制作您自己的适配器及其Filter 方法(在这种情况下,适配器将保存过滤器CheckBoxes 的状态)。当用户检查过滤器CheckBox 时,调用适配器上的方法来更新相应的布尔状态。还要在适配器上调用getFilter() 方法并进行过滤:((Filterable) adapter).getFilter().filter(null)。那里有很多关于为适配器实现Filter 的教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2012-06-12
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多