为什么LiveData在屏幕旋转后不能恢复原始UI状态?

时间:2019-07-01 18:03:18

标签: android viewmodel android-room

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

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

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

2 个答案:

答案 0 :(得分:1)

我建议阅读此answer。但是可以,默认情况下,edittexts将自动处理状态。此外,在您的方案中,由于数据库未更改,实时数据不会再次加载该值。

答案 1 :(得分:0)

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

  

某些UI元素(包括EditText)使用自己的onSaveInstanceState实现保存其状态。杀死进程后,可以像更改配置后恢复状态一样恢复状态。