使用SearchView更新ArrayAdapter for List的数据集

时间:2016-06-20 06:07:37

标签: android listview android-arrayadapter searchview

我有一个数组适配器可以提供给我的listview,它也包含一个searchview。适配器包含2个数组列表,例如A& B. A& B最初都包含所有要显示的项目。随后B包含搜索的过滤结果(通过实现setOnQueryTextListener,onQueryTextChange并在此过滤适配器完成)。在搜索结束时,B的所有项目都从A中补充。所有项目都可以通过点击删除。我遇到的问题如下:

  1. 说A有10个项目& B有3项(正在搜索中)。如果 我从B中删除了一个项目,同样没有从A中删除(由于A 关闭搜索时填充B)
  2. 在搜索过程中添加项目(通过浮动操作按钮)时也会发生同样的情况,因为B是填充列表视图的活动列表。在这种情况下,A不会更新。
  3. 致电adapter.notifyDataSetChanged()似乎无效。我正在寻找的是阵列A& B始终保持一致,即添加/删除项目在搜索过程中将其从两者中删除。我是否需要在每次添加/删除项目时向我的适配器添加需要调用的方法,其中我需要检查搜索是否正在进行中&妥善处理案件?它似乎不是一个最佳解决方案。我对Android开发相对较新,所以我希望有人可以指出我正确的方向,因为我无法找到类似于我的问题的解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

为了回答我自己的问题,解决方案变得更加简单,因为我在正确的轨道上。我所要做的就是向适配器添加一个公共方法,我调用所有这些添加/删除操作,无论操作是否在过滤时完成。如果要删除,在这个公共方法中我只是从原始&中移除了对象。过滤数据源。从原始文件中删除,也通过引用将其从主数组列表中删除(在显示列表的片段中)。唯一需要注意的是,要获取要删除的正确对象,我添加了另一个方法,该方法根据发出删除的位置从筛选列表(始终是活动数据源)返回对象。这很重要,因为如果主列表有4个项目,但是当过滤时占用了第1个项目(占据了主列表中的第3个位置),则会删除不正确的对象,即主要的第1个项目名单。希望这可以帮助遇到这种情况的任何人。