【问题标题】:Why does LiveData not restore original UI state after screen rotation?为什么 LiveData 在屏幕旋转后无法恢复原始 UI 状态?
【发布时间】:2019-07-01 18:03:18
【问题描述】:

我正在开发一个应用程序,并且正在使用 android 架构组件。我有一个用于存储和管理 UI 数据的 ViewModel。我有一个活动,它显示从 Room 数据库加载为 LiveData 的文本项目列表。包含 LiveData 的视图是可编辑的。基本上,它是一个包含 EditTexts 的 RecyclerView。

我想知道的是用户更改 EditText 的值之一,然后发生导致活动重新启动的某些情况,例如配置更改。据我了解,该活动被再次创建,这意味着 onChanged() 回调被再次调用,并且列表被重新填充来自数据库的原始 LiveData。因此,我希望 EditText(其文本由用户编辑的那个)显示在用户更改文本之前分配给它的原始 LiveData。但是,当我旋转设备的屏幕时,编辑后的文本仍然存在。

这是我想要的,但我不认为这是默认行为。我想知道为什么编辑的文本在配置更改后仍然存在,因为它从未保存到数据库中。这只是 EditTexts 的一个特殊属性吗?该用户的帖子描述了类似的情况,即他们的 EditTexts 在屏幕旋转后保留了他们最近的状态,而他们的 TextViews 被清除:Restoring state of TextView after screen rotation?

【问题讨论】:

    标签: android viewmodel android-room


    【解决方案1】:

    我建议阅读此answer。但是,是的,edittexts 默认会自动处理状态。此外,在您的场景中,livedata 没有再次加载该值,因为数据库没有更改。

    【讨论】:

      【解决方案2】:

      在这个代码实验室中找到了我的问题的答案:https://codelabs.developers.google.com/codelabs/android-lifecycles/#6

      一些 UI 元素,包括 EditText,使用他们自己的 onSaveInstanceState 实现来保存他们的状态。此状态在进程被终止后恢复,与配置更改后恢复的方式相同。

      【讨论】:

        猜你喜欢
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        相关资源
        最近更新 更多