android - 使用复选框过滤 ListView

标签 android android-listview filtering android-arrayadapter

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

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

我试图修改我的自定义 ArrayAdaptergetView(),但我不知道如何正确地执行此操作。有人有解决方案吗?

我的 ArrayAdapterthis 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/

相关文章:

android - 在 onBackPressed() 的 MainActivity 中关闭应用

arrays - 如果字段数组和参数数组相交,则过滤 MongoDb 集合

jquery - 单击按钮时过滤 Primefaces 数据表

android - 视频捕获和实现 Google Cardboard(如 Paul McCartney 应用程序)

android - 在android中创建Wifi热点配置

Android webview 不显示 '%' 字符

android - 我在 ListView 的 getView() 中将 textview 的 VISIBILITY 设置为 VISIBLE - 它对于下一行也保持可见。怎么解决这个问题呢?

Android 调整 ImageView 大小导致 View 容器调整大小

android - 强制关闭设备上的 ListView 项目,但在模拟器中运行良好

java - 尝试从另一个不工作的 ArrayList 中过滤