android - Recyclerview 中的 Diffutil,如果添加新项目则自动滚动

标签 android android-recyclerview

如果我们使用 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/

相关文章:

android - 在 RecyclerView 中检测到不一致,如何在滚动时更改 RecyclerView 的内容

android - 如果recyclerview为空android如何显示textview

android - Activity 中的 FragmentPagerAdapter 中的 RecyclerView

java - 自定义 View 类中的监听器始终为空

Android,如何在微调器中为文本添加一些正确的填充?

Nexus 4 和 5X 中的 Android 值

android - 嵌入式 Web 浏览器上的 Azure Oauth 身份验证将于 2017 年 4 月 20 日被阻止,发出警告

android - RecyclerView.Adapter 的 onCreateViewHolder 被调用两次或多次,多次

java - 路由器后面的android套接字编程

android - 如何同时捕获相机图像缩略图和完整图像