小编O-B*_*-BL的帖子

如何修复使用 DiffUtil 向 ListUpdateCallback 发送更新时得到的错误位置

我有一个 Android 应用程序,用户可以在其中同时修改多个String项目EditText,所以我需要弄清楚发生了什么变化,以便将更改通知服务器(创建新项目、更新现有项目或删除后者),这就是为什么我使用DiffUtilwithListUpdateCallback来做到这一点。如果旧列表的大小为 2 项的问题;并且我删除了索引 0 处的项目,然后在列表末尾添加了 3 个项目,我得到了一个onInserted带有不正确位置参数的回调,导致IndexOutOfBoundsException, (这是删除旧列表中任何项目的行为,除了最后一个)请看一下这个显示问题的 GIF

我已经尝试了以下代码,并对新列表进行了其他更改,例如在索引 1 处删除,然后在列表末尾添加 3 个项目,它工作正常!

我正在使用的数组是 Answer 类型,它是一个类:

public class Answer {
    private String id;
    private String questionId;
    private String text;
    private Integer count;
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果两个项目相同,则可以通过 id 标识 2 个不同的对象;然后可以通过文本识别内容。

DiffUtil.Callback

public class AnswersDiffCallback extends DiffUtil.Callback {

    List<Answer> newAnswers;
    List<Answer> oldAnswers;

    public AnswersDiffCallback(List<Answer> newAnswers, List<Answer> oldAnswers) {
        this.newAnswers = newAnswers;
        this.oldAnswers = oldAnswers;
    } …
Run Code Online (Sandbox Code Playgroud)

java android android-diffutils

5
推荐指数
1
解决办法
634
查看次数

标签 统计

android ×1

android-diffutils ×1

java ×1