Sri*_*m R 6 android android-recyclerview
我正在使用 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);
Run Code Online (Sandbox Code Playgroud)
每次添加新项目时, RecyclerView 都会滚动到顶部项目。如何确保在添加新项目时不会发生滚动。
我已经覆盖了对象的 equals 方法,以便它将对象与 ID 进行比较。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Movie)) return false;
Movie movie = (Movie) obj;
return this.id == movie.id;
}
Run Code Online (Sandbox Code Playgroud)
从我在您的代码中看到的情况来看,您用于查看如何比较电影的 diffutil 回调可能是按对象进行比较,而不是通过每部电影可能拥有的内部 id 进行比较。
如果您直接比较对象(这是默认实现),并且由于您正在清除数组,则对于您添加的所有新对象,此比较将失败。您需要更改比较元素的方式,以便 diffutil 不会将所有元素解释为已更改。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |