我正在使用最新的Android SDK,我希望使用ListView
过滤代表不同植物列表的CheckBoxes
。
在我的列表中,我有800个具有不同属性的项目(例如颜色,大小,可编辑性),而CheckBoxes
应该以减法的方式过滤列表。只有与所有属性匹配的列表项/视图应该是可见的 - 所有其他行应该是不可见的(程序应该像www.pilzsuchmaschine.de上的过滤系统一样工作)。
我尝试修改自定义getView()
的{{1}},但我没有正确理解如何正确执行此操作。有没有人有解决方案?
我的ArrayAdapter
与this one非常相似。
答案 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
的教程。