使用复选框过滤ListView

时间:2013-01-26 15:28:55

标签: android android-listview filtering android-arrayadapter

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

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

我尝试修改自定义getView()的{​​{1}},但我没有正确理解如何正确执行此操作。有没有人有解决方案?

我的ArrayAdapterthis one非常相似。

1 个答案:

答案 0 :(得分:1)

  

我尝试修改自定义ArrayAdapter的getView()但我没有   正确的想法如何正确地做到这一点。有没有人有   溶液

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

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

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