为什么LiveData在屏幕旋转后不恢复原来的UI状态?
Why does LiveData not restore original UI state after screen rotation?
我正在开发一个应用程序并使用 android 架构组件。我有一个用于存储和管理 UI 数据的 ViewModel。我有一个 activity 显示从 Room 数据库加载为 LiveData 的文本项列表。包含 LiveData 的视图是可编辑的。基本上,它是一个包含 EditText 的 RecyclerView。
我想知道的是用户更改其中一个 EditText 的值,然后发生导致 activity 重新启动的情况,例如配置更改。据我了解,activity 被再次创建,这意味着 onChanged() 回调被再次调用并且列表被重新填充来自数据库的原始 LiveData。因此,我希望 EditText(其文本由用户编辑)显示在用户更改文本之前分配给它的原始 LiveData。但是,当我旋转设备的屏幕时,编辑的文本仍然存在。
这是我想要的,但我不认为这是默认行为。我想知道为什么编辑的文本在配置更改后仍然存在,因为它从未保存到数据库中。这只是一个特殊的 属性 的 EditTexts 吗?该用户的 post 描述了类似的情况,他们的 EditText 在屏幕旋转后保留了最新状态,而他们的 TextView 被清除:Restoring state of TextView after screen rotation?
我推荐阅读这篇 answer。但是,是的,默认情况下 edittexts 会自动处理状态。此外,在您的场景中,livedata 没有再次加载该值,因为数据库没有更改。
在此代码实验室中找到了我的问题的答案:https://codelabs.developers.google.com/codelabs/android-lifecycles/#6
Some UI elements, including EditText, save their state using their own onSaveInstanceState implementation. This state is restored after a process is killed the same way it's restored after a configuration change.
我正在开发一个应用程序并使用 android 架构组件。我有一个用于存储和管理 UI 数据的 ViewModel。我有一个 activity 显示从 Room 数据库加载为 LiveData 的文本项列表。包含 LiveData 的视图是可编辑的。基本上,它是一个包含 EditText 的 RecyclerView。
我想知道的是用户更改其中一个 EditText 的值,然后发生导致 activity 重新启动的情况,例如配置更改。据我了解,activity 被再次创建,这意味着 onChanged() 回调被再次调用并且列表被重新填充来自数据库的原始 LiveData。因此,我希望 EditText(其文本由用户编辑)显示在用户更改文本之前分配给它的原始 LiveData。但是,当我旋转设备的屏幕时,编辑的文本仍然存在。
这是我想要的,但我不认为这是默认行为。我想知道为什么编辑的文本在配置更改后仍然存在,因为它从未保存到数据库中。这只是一个特殊的 属性 的 EditTexts 吗?该用户的 post 描述了类似的情况,他们的 EditText 在屏幕旋转后保留了最新状态,而他们的 TextView 被清除:Restoring state of TextView after screen rotation?
我推荐阅读这篇 answer。但是,是的,默认情况下 edittexts 会自动处理状态。此外,在您的场景中,livedata 没有再次加载该值,因为数据库没有更改。
在此代码实验室中找到了我的问题的答案:https://codelabs.developers.google.com/codelabs/android-lifecycles/#6
Some UI elements, including EditText, save their state using their own onSaveInstanceState implementation. This state is restored after a process is killed the same way it's restored after a configuration change.