我们是否应该将项目的副本传递给RecyclerView,以便在我们过滤时,我们不会从实际列表中删除?

时间:2016-06-12 09:37:39

标签: android android-recyclerview

我的活动中有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,所以我错过了什么这里吗?

1 个答案:

答案 0 :(得分:1)

我在下面的评论中找到了答案: How to filter a RecyclerView with a SearchView

引用:

  

@LalitThapa看看我上面的ExampleAdapter的构造函数。第二行对你来说应该很有趣,因为那是我制作传递给适配器的List副本的地方。你想要的是两个单独的列表。一个在您的活动或片段中,其中包含所有项目和适配器中的第二个列表,其中仅包含已过滤的图标。您的问题是您为两者使用相同的List实例。 - Xaver Kapeller 1月17日19:05