我正在尝试创建一种在RecyclerView中进行搜索的方法,以对搜索到的项目进行动画处理(隐藏那些不符合条件的项目,并添加那些符合条件的项目(如果尚未添加的话) )。
当然,搜索RecyclerView的最简单方法就是过滤列表和notifyDataSetChanged()
。但是大多数开发人员都知道,此调用从头开始重新创建适配器,几乎就像刚刚分配的那样。另外,此调用不会给被搜索的项目带来任何感觉,因为所有项目都会同时出现。
我尝试创建某种方式来将符合或不符合条件的项目添加或删除到列表中,但这会丢失项目的顺序。当然,除非您搜索该项目在主列表中的位置,然后将其放在其中。由于您每次都要搜索每个插入片段,因此搜索时间更长。
我研究过使用TreeMap
,但是无法通过索引访问树,只能通过键访问树。
我也使用过SparseArray
,唯一的问题是SparseArray
不会告诉您插入项目的索引是什么,您必须再次搜索该项目(按顺序通知适配器)。
有推荐的方法吗?我错过了一些教程吗?到处搜寻我只能找到notifyDatasetChanged()
解决方案。
答案 0 :(得分:0)
我相信您要搜索的是DiffUtil
。
这里有一个很好解释的Medium article,用于解释其用法。
研究这个问题时,我遇到的另一个有趣的答案是Xaver Kapeller提供的SO Answer(只需在页面中搜索SortedListAdapter,尽管他的答案是非常好的阅读imo)。他的SortedListAdapter library使代码更加简单和简洁。