【问题标题】:Filter ListView with Checkboxes使用复选框过滤 ListView
【发布时间】:2013-01-10 09:29:06
【问题描述】:
我正在使用最新的 Android SDK,我想用CheckBoxes 过滤代表不同植物列表的ListView。
在我的列表中,我有 800 个具有不同属性(例如颜色、大小、可食用性)的项目,CheckBoxes 应该以减法方式过滤列表。只有匹配所有属性的列表项/视图应该是可见的 - 所有其他行应该是不可见的(程序应该像www.pilzsuchmaschine.de 上的过滤系统一样工作)。
我尝试修改自定义ArrayAdapter 的getView(),但我不知道如何正确执行此操作。有人有解决办法吗?
我的ArrayAdapter 和this 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 的教程。