如果我们使用 DiffUtil.Callback
,并执行
adapter.setItems(itemList);
diff.dispatchUpdatesTo(adapter);
我们如何确保添加新元素时会滚动到新位置。
我有一个案例,我看到项目消失了,一个新的项目被创建为顶部的第一个元素,但不可见。它隐藏在顶部,直到您向下滚动以使其可见。
在使用 DiffUtil
之前,我是手动实现的,在我知道我在某个位置(顶部)插入后,我可以滚动到。
最佳答案
有一种简单的方法可以做到这一点,如果项目被插入到可视区域之外,也可以保留用户的滚动位置:
import android.os.Parcelable;
Parcelable recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
// apply diff result here (dispatch updates to the adapter)
recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);
使用这种方法,如果将新项目插入到用户可以看到它们的位置,则新项目将变得可见 - 但如果将项目插入到 View 之外,则用户的视点将被保留。
关于android - Recyclerview 中的 Diffutil,如果添加新项目则自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458146/