我有一个带有表格的片段以编辑一些数据。它使用带有LiveData的ViewModel从存储库加载数据并更新其状态(例如,是否正确保存)。加载的数据将填充到EditText中。
LiveData设置如下
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
...
if (savedInstanceState == null) {
viewModel.loadDataFromRepo(dataId)
}
viewModel.data.observe(
viewLifecycleOwner,
Observer<Data> { data ->
editText.setText(data)
}
)
}
当用户进入屏幕时,将正确填充数据,并按预期进行保存。但是,如果用户编辑数据并旋转屏幕而不进行保存,则editText
将使用存储在存储库中的原始数据值而不是保存在savedInstanceState
中的已编辑数据来填充。
这当然是由于从savedInstanceState
恢复状态后触发LiveData观察器引起的。但是,通过在Activity中进行类似的设置(在onCreate
中调用了相同的代码),它可以按预期工作。
如何修改代码以使用savedInstanceState
?