首页 > 解决方案 > GridLayoutManager 是否已损坏且未在 RecyclerView-v7:28.0.0 中保留状态?- 发生了什么变化?

问题描述

因此,我目前正在支持之前由完全不同的开发人员团队开发的 Android 应用程序的开发工作。

作为我持续支持工作的一部分,我们已将 TargetSdkVersion 从 23 升级到 28,因此,所有依赖项和支持库以及 appcompat 库也是如此。

但是,随着 recyclerview 库的升级,我们开始注意到 App 中 RecyclerView 启用无限滚动的实现存在一个特殊问题。

观察到以下情况。

  1. 启动应用程序。访问托管 RecyclerView 的任何 Activity、Fragment 或 View。

  2. 向上滑动。点击 RecyclerView 中显示的任何卡片。将启动一个新的活动或片段,其中包含该点击卡内的信息详细信息。

  3. 返回,关闭现有的详细信息视图。

  4. 在 v28 中,RecyclerView 只是从滚动的开头返回显示。视图不会自动滚动或其他任何东西,它只会显示第一个项目。

  5. 在 v23 中,RecyclerView 保留了以前的状态,就像在点击卡片并启动新的 Activity、Fragment 或 View 之前显示的一组 Children 中一样,是在没有任何更改或自动滚动的情况下显示的内容。

  6. 最糟糕的部分,v28,没有任何东西会保留 RecyclerView 的状态。例如,在 onPause() 中调用 LayoutManager.onSaveInstanceState(),将其存储为 Parcelable 并将其在 onResume() 中应用为 LayoutManager.onRestoreInstanceState(Parcelable state) 将不起作用。否则,LayoutManager.findFirstVisibleItemPosition(),然后在 onPause() 中计算 firstVisibleItemPositionOffset,并在 onResume() 中的 LayoutManager.smoothScrollWithOffset 上使用它们,这些策略似乎都不起作用。

GridLayoutManager 是否已损坏且未在 RecyclerView-v7:28.0.0 中保留状态?

RecyclerView 保留活动和窗口之间的状态,甚至方向更改时的最后一个版本是什么?

标签: androidandroid-recyclerviewrecyclerview-layoutandroid-9.0-pie

解决方案


推荐阅读