【发布时间】:2016-06-20 06:07:36
【问题描述】:
我有一个数组适配器可以提供给我的列表视图,该列表视图还包含一个搜索视图。适配器包含 2 个数组列表,例如 A 和 B。A 和 B 最初都包含所有要显示的项目,随后 B 包含搜索的过滤结果(通过实现 setOnQueryTextListener、onQueryTextChange 并在此处过滤适配器来完成)。在搜索结束时,B 的所有项目都从 A 补充。所有项目都可以通过点击它们来删除。我遇到的问题如下:
- 说 A 有 10 个项目,B 有 3 个项目(正在进行搜索)。如果 我从 B 中删除了一个项目,同样没有从 A 中删除(由于 A 关闭搜索时填充 B)
- 在搜索过程中添加项目(通过浮动操作按钮)时也会发生同样的情况,因为 B 是填充列表视图的活动列表。在这种情况下,A 不会更新。
呼叫adapter.notifyDataSetChanged() 似乎不起作用。我正在寻找的是数组 A 和 B 始终保持一致,即在搜索过程中添加/删除一个项目会将其从两者中删除。我是否需要向适配器添加方法,每次添加/删除项目时都需要调用这些方法,其中我需要检查是否正在进行搜索并适当地处理案例?这似乎不是一个最佳解决方案。我对 Android 开发比较陌生,所以我希望有人能指出我正确的方向,因为我找不到与我类似的问题的解决方案。谢谢!
【问题讨论】:
-
你需要了解
Filterable接口和Filter类,adapter.getFilter().filter(...)是过滤掉项目的正常方式 -
问题不在于过滤,而在于过滤/搜索期间完成的更新。关于它的快速搜索似乎并没有真正指向我的问题的解决方案:(例如stackoverflow.com/a/14369336/1113598等
-
研究通用 adapter,注意私有
ArrayFilter类,适配器基于 stdArrayAdapter类,注释中描述了 2 个小但非常有用的更改 -
好的,我检查了适配器,除了过滤之外,我看到适配器上的添加/删除/清除等方法映射了两个数据集上的更改,即实际列表和过滤列表,所以存在与我所做的相比,这种过滤方法有什么特别的优势吗?也许我在这里遗漏了一些明显的东西..
-
add/remove/clear用于修改适配器内容,不打算在过滤时使用,过滤时只应使用adapter.getFilter().filter(...)
标签: android listview android-arrayadapter searchview