【问题标题】:OnScreenRotation with RecyclerView in tabbed Activity在选项卡式活动中使用 RecyclerView 的 OnScreenRotation
【发布时间】:2024-01-18 16:39:01
【问题描述】:

我正在使用选项卡式活动。在其中一个选项卡中,我有两个按钮和一个 Recyclerview。在 RecyclerView 我有两个微调器和一个编辑文本。 第一个按钮的目的是在 RecyclerView 中添加一个新项目,第二个按钮是将所选元素保存在微调器和编辑文本中。

我的问题是当屏幕旋转时,Recyclerview 被清空了。我尝试使用 Recyclerview 的 LayoutManager 的 OnSaveInstanceState() 和 OnRestoreInstanceState 来保存状态,但它仍然被删除。

如果有任何帮助,我将不胜感激!

【问题讨论】:

  • 实现视图模型
  • 你能详细说明吗?

标签: android android-recyclerview screen-rotation savestate android-tabbed-activity


【解决方案1】:

默认情况下,Activity 和 Fragment 有一个 onSaveInstanceState() 方法,系统使用该方法来提供一个 Bundle,您可以在其中写入原始数据和可打包对象。

只要您的数据简单,就可以。在你的情况下,它不是。

框架可能会决定销毁或重新创建 UI 控制器,以响应您完全无法控制的某些用户操作或设备事件。

例如屏幕旋转(方向改变)。

ViewModel 来救场了。

ViewModel 是一个属于 Android 架构组件的类,它具有生命周期意识。

更多信息请查看this 文档。

【讨论】:

  • 所以如果我理解正确的话,我应该将来自 Recyclerview 的 Bundle 保存在 Viewmodel 中,例如在我的片段的 OnPause 中,然后将其从 Viewmodel 加载回 onResume 中的 Recyclerview?