我正在使用DiffUtil实现在滚动时向RecyclerView添加新数据。
这是用于在需要时更新项目的代码。
final DiffUtilsCallback<Movie> diffUtilsCallback = new DiffUtilsCallback<>(this.movies, movies);
final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffUtilsCallback);
this.movies.clear();
this.movies.addAll(movies);
diffResult.dispatchUpdatesTo(this);
每次添加新项目时,RecyclerView都会滚动到顶部项目。如何确保添加新项目时不会发生滚动。
我已经覆盖了equals方法的对象,因此它将对象与ID进行比较。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Movie)) return false;
Movie movie = (Movie) obj;
return this.id == movie.id;
}
答案 0 :(得分:0)
从我在你的代码中看到的可能是你的diffutil回调过去看看如何比较电影是比较对象而不是你可能每部电影的内部id。
如果要直接比较默认实现的对象,并且因为要清除阵列,则对于要添加的所有新对象,此比较将失败。您需要更改比较元素的方式,以便diffutil不会将所有元素都解释为已更改。