我正在使用最新的 Android SDK,我想使用 CheckBoxes
过滤代表不同植物列表的 ListView
。
在我的列表中,我有 800 个具有不同属性(例如颜色、大小、可食用性)的项目,CheckBoxes
应该以减法方式过滤列表。只有匹配所有属性的列表项/ View 应该是可见的 - 所有其他行应该是不可见的(该程序应该像 www.pilzsuchmaschine.de 上的过滤系统一样工作)。
我试图修改我的自定义 ArrayAdapter
的 getView()
,但我不知道如何正确地执行此操作。有人有解决方案吗?
我的 ArrayAdapter
与 this one 非常相似.
最佳答案
I tried to modify the getView() of my custom ArrayAdapter but I didn't get the right idea how to do that properly. Does anyone have a solution?
您不在 getView()
方法中进行过滤。首先在所有过滤器 CheckBoxes
上设置一个 OnCheckedChangeListener
以监视它们的状态(每个 CheckBoxes
都应该有一个 boolean
变量来保持其状态)。当选中/取消选中过滤器 CheckBox
时,更新状态变量,然后过滤 ListView
。可以通过两种方式过滤 ListView
,手动或使用专用机制(Filter
类)。
手动地,当用户选中一个 CheckBox
时,您将获取过滤器 CheckBoxes
的所有状态,并将它们与植物列表中的每个元素进行匹配。哪个元素匹配所有 CheckBoxes
状态是有效的,应该添加到新列表中。完成后,使适配器指向新创建的列表并调用 notifyDataSetChanged()
。我不会采用这种方法,因为您有很多项目。
正确的方法是制作您自己的适配器及其 Filter
方法(在这种情况下,适配器将保存过滤器 CheckBoxes
的状态)。当用户选中过滤器 CheckBox
时,调用适配器上的方法来更新相应的 bool 状态。还调用适配器上的 getFilter()
方法并执行过滤:((Filterable) adapter).getFilter().filter(null)
。那里有很多关于为适配器实现 Filter
的教程。
关于android - 使用复选框过滤 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538380/