android - RecyclerView 存储/恢复 Activity 之间的状态

标签 android listview android-recyclerview

我正在将我的 ListViews 迁移到 RecyclerViews。对于 ListView ,我使用了 here 所描述的常用技术。存储和恢复 Activity 之间的滚动位置。

如何对 RecyclerViews 做同样的事情? RecyclerView.onSaveInstanceState() 似乎有 protected 访问权限,所以不能直接使用。

最佳答案

好的,所以回答我自己的问题。据我了解,由于他们已经将布局代码和 View 回收代码(因此得名)解耦,因此负责保持布局状态(并恢复它)的组件现在是 LayoutManager你的回收站 View 。

因此,要存储状态,您使用相同的模式,但在 布局管理器 上而不是 recyclerview:

protected void onSaveInstanceState(Bundle state) {
     super.onSaveInstanceState(state);

     // Save list state
     mListState = mLayoutManager.onSaveInstanceState();
     state.putParcelable(LIST_STATE_KEY, mListState);
}

onRestoreInstanceState()中恢复状态:

protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);

    // Retrieve list state and list/item positions
    if(state != null)
        mListState = state.getParcelable(LIST_STATE_KEY);
}

然后更新LayoutManager(我在onResume()中做):

@Override
protected void onResume() {
    super.onResume();

    if (mListState != null) {
        mLayoutManager.onRestoreInstanceState(mListState);
    }
}

关于android - RecyclerView 存储/恢复 Activity 之间的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236390/

相关文章:

java - 确定当前正在使用哪个数组列表?

android - 更改适配器上的数据后,如何将 ListView 的滚动条返回顶部?

android - Glide v4 RecyclerView 预加载图像不显示

Android RecyclerView数组列表动态变化

java - 通过对话框将回收器 View 中的图像动画化为全屏

Android:为什么 Handlers 发布一个可运行的?

android - 如何在android中保存可发现的蓝牙设备列表?

安卓 WebView 客户端

android - 如何强制应用进入全屏模式(切入友好状态)

android - 来自 URL 的图像未显示在 ImageView 中,我已经尝试了所有我能找到的