android - GridLayoutManager 是否已损坏且未在 RecyclerView-v7:28.0.0 中保留状态?- 发生了什么变化?
问题描述
因此,我目前正在支持之前由完全不同的开发人员团队开发的 Android 应用程序的开发工作。
作为我持续支持工作的一部分,我们已将 TargetSdkVersion 从 23 升级到 28,因此,所有依赖项和支持库以及 appcompat 库也是如此。
但是,随着 recyclerview 库的升级,我们开始注意到 App 中 RecyclerView 启用无限滚动的实现存在一个特殊问题。
观察到以下情况。
启动应用程序。访问托管 RecyclerView 的任何 Activity、Fragment 或 View。
向上滑动。点击 RecyclerView 中显示的任何卡片。将启动一个新的活动或片段,其中包含该点击卡内的信息详细信息。
返回,关闭现有的详细信息视图。
在 v28 中,RecyclerView 只是从滚动的开头返回显示。视图不会自动滚动或其他任何东西,它只会显示第一个项目。
在 v23 中,RecyclerView 保留了以前的状态,就像在点击卡片并启动新的 Activity、Fragment 或 View 之前显示的一组 Children 中一样,是在没有任何更改或自动滚动的情况下显示的内容。
最糟糕的部分,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 保留活动和窗口之间的状态,甚至方向更改时的最后一个版本是什么?
解决方案
推荐阅读
- arduino - nodemcu esp8266 http请求返回-1“连接失败”
- python - 返回具有动态索引的嵌套字典或嵌套列表的值
- java - 如何使用 docker-java 获取容器的主机名?
- angular - 如何在 Angular 指令中选择具有特定类的元素的子元素?
- python - 从分组的熊猫系列中创建晶须图
- flutter - 有条件地向图像传递参数
- flutter - 无法检查用户帐户是否存在?
- fortran - 在fortran中打印和保存矩阵
- python - Django Rest Framework:在多部分/表单数据请求中序列化数组
- matplotlib - 如何在seaborn中制作一个带有连接线的条形图,指示从一个时间段到下一个时间段的百分比变化?