我的活动中有10件物品。 它们显示在RecyclerView中。 itms存储在列表中;
List<CustomItem> items = new ArrayList<>();
我将它们传递给RecyclerView适配器,如下所示:
recyclerView.setAdapter(new RVAdapter(this, items));
现在,每当我通过字符串查询过滤项目时,就这样了 例如,recycleler视图按描述显示项目的子集 我必须将已过滤的项目列表传递给回收站视图,如下所示:
List<CustomItem> filteredItems = CustomItem.filterByQuery(items, query);
然后我:
adapter.setItemList(filteredItems);
notifyDataSetChanged();
- &GT;它将过滤的项目设置为代替我在构造函数中发送给它的items
,并有效地覆盖了活动items
,因为它们都指向内存中的相同对象。
我意识到通过过滤以显示结果的子集,我会覆盖acitivy的项目列表,因为它由活动和RecyclerView
然而,在我RecyclerView
上看到的所有代码示例和教程中,我从未见过有人对项目列表进行深层复制并将其传递给RV,所以我错过了什么这里吗?
答案 0 :(得分:1)
我在下面的评论中找到了答案: How to filter a RecyclerView with a SearchView
引用:
@LalitThapa看看我上面的ExampleAdapter的构造函数。第二行对你来说应该很有趣,因为那是我制作传递给适配器的List副本的地方。你想要的是两个单独的列表。一个在您的活动或片段中,其中包含所有项目和适配器中的第二个列表,其中仅包含已过滤的图标。您的问题是您为两者使用相同的List实例。 - Xaver Kapeller 1月17日19:05