【问题标题】:DiffUtil - How to keep the old List before updating itDiffUtil - 如何在更新之前保留旧列表
【发布时间】:2020-03-23 14:38:03
【问题描述】:

我正在尝试使用DiffUtil 来更新RecyclerView。我有一个类DataProvider,它是一个单例类,其中包含包含对象的列表。

每次我需要更新RecyclerView 时,我都会修改DataProvider 中的列表。现在,当我尝试使用将两个列表作为参数的DiffUtil 时,我真的不再拥有旧的List,因为我更新了它。

在更新之前保留旧的List 的最佳方法是什么,以便我可以比较它们并在RecyclerView 上进行所需的更新而无需致电notifyDataSetChanged()

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    请参考这个答案:https://stackoverflow.com/a/47522246/8298909

    我知道您在问一个不同的问题,但我的链接答案中的两个代码 sn-ps 几乎正是您正在寻找的内容:DiffUtil.Callback 的简单实现以及如何使用它的示例即使您直接修改支持适配器的数据源。

    关键是在执行更改之前使用new ArrayList<>([your data here]) 创建修改前列表的(临时)副本。

    【讨论】:

    • 那不只是创建一个对同一个List 的引用,而且每当我修改新列表时,旧列表也会被修改?
    • 因为当我检查调试器时,列表都有不同的 ID,例如 ArrayList@5162ArrayList@5163,但是当我检查里面的项目时,它们都引用同一个对象,例如第一个项目oldList 中的 Item@5238newList 中的相同
    • 没关系,我只是想出了可变和不可变对象。感谢您的帮助。
    • @Enve,如果你找到了你的解决方案,你会发布吗?我也面临同样的问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2021-12-07
    • 2019-07-08
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多