旋转后,ViewModel中的LiveData会覆盖Fragment上的savedInstanceState

时间:2019-08-17 22:08:38

标签: android android-livedata

我有一个带有表格的片段以编辑一些数据。它使用带有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

0 个答案:

没有答案