我有一个 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)