使用 SearchView 更新列表的 ArrayAdapter 数据集
Updating dataset of ArrayAdapter for List with SearchView
我有一个数组适配器可以提供给我的列表视图,它还包含一个搜索视图。适配器包含 2 个数组列表,例如 A 和 B。A 和 B 最初都包含要显示的所有项目,随后 B 包含搜索的过滤结果(通过实现 setOnQueryTextListener、onQueryTextChange 并在此处过滤适配器来完成)。在搜索关闭时,B 的所有项目都从 A 补充。所有项目都可以通过点击它们来删除。我遇到的问题如下:
- 假设 A 有 10 个项目,B 有 3 个项目(正在搜索)。如果
我从 B 中删除了一个项目,但没有从 A 中删除相同的项目(由于 A
关闭搜索时填充 B)
- 在搜索过程中添加项目(通过浮动操作按钮)时会发生同样的情况,因为 B 是填充列表视图的活动列表。在这种情况下 A 没有更新。
调用 adapter.notifyDataSetChanged()
似乎不起作用。我正在寻找的是数组 A 和 B 始终保持一致,即 adding/removing 一个项目在搜索过程中将其从两者中删除。我是否需要向我的适配器添加需要在每次项目为 added/removed 时调用的方法,其中我需要检查搜索是否正在进行并适当地处理案例?这似乎不是最佳解决方案。我是 Android 开发的新手,所以我希望有人能为我指明正确的方向,因为我找不到与我类似的问题的解决方案。谢谢!
为了回答我自己的问题,结果证明解决方案要简单得多,因为我在正确的轨道上。我所要做的就是向适配器添加一个 public 方法,我为所有此类 add/remove 操作调用该方法,而不管该操作是否在过滤时完成。在删除的情况下,在这个 public 方法中,我只是从原始和过滤的数据源中删除了对象。从原始文件中删除,还通过引用将其从主数组列表(在显示列表的片段中)中删除。唯一需要注意的是,为了得到正确的对象被删除,我添加了另一个方法,该方法根据删除发出的位置从过滤列表(它始终是活动数据源)返回对象。这很重要,因为如果主列表有 4 个项目,但在过滤时删除了第一个项目(占据主列表中的第 3 个位置),将删除不正确的对象,即主列表中的第一个项目列表。希望这可以帮助遇到这种情况的任何人。
我有一个数组适配器可以提供给我的列表视图,它还包含一个搜索视图。适配器包含 2 个数组列表,例如 A 和 B。A 和 B 最初都包含要显示的所有项目,随后 B 包含搜索的过滤结果(通过实现 setOnQueryTextListener、onQueryTextChange 并在此处过滤适配器来完成)。在搜索关闭时,B 的所有项目都从 A 补充。所有项目都可以通过点击它们来删除。我遇到的问题如下:
- 假设 A 有 10 个项目,B 有 3 个项目(正在搜索)。如果 我从 B 中删除了一个项目,但没有从 A 中删除相同的项目(由于 A 关闭搜索时填充 B)
- 在搜索过程中添加项目(通过浮动操作按钮)时会发生同样的情况,因为 B 是填充列表视图的活动列表。在这种情况下 A 没有更新。
调用 adapter.notifyDataSetChanged()
似乎不起作用。我正在寻找的是数组 A 和 B 始终保持一致,即 adding/removing 一个项目在搜索过程中将其从两者中删除。我是否需要向我的适配器添加需要在每次项目为 added/removed 时调用的方法,其中我需要检查搜索是否正在进行并适当地处理案例?这似乎不是最佳解决方案。我是 Android 开发的新手,所以我希望有人能为我指明正确的方向,因为我找不到与我类似的问题的解决方案。谢谢!
为了回答我自己的问题,结果证明解决方案要简单得多,因为我在正确的轨道上。我所要做的就是向适配器添加一个 public 方法,我为所有此类 add/remove 操作调用该方法,而不管该操作是否在过滤时完成。在删除的情况下,在这个 public 方法中,我只是从原始和过滤的数据源中删除了对象。从原始文件中删除,还通过引用将其从主数组列表(在显示列表的片段中)中删除。唯一需要注意的是,为了得到正确的对象被删除,我添加了另一个方法,该方法根据删除发出的位置从过滤列表(它始终是活动数据源)返回对象。这很重要,因为如果主列表有 4 个项目,但在过滤时删除了第一个项目(占据主列表中的第 3 个位置),将删除不正确的对象,即主列表中的第一个项目列表。希望这可以帮助遇到这种情况的任何人。