我在这里回答了一个类似的问题,这可能会帮助你现在修复自己。
这是来自 android 框架的错误。错误详情
该修复适用于 28.0.0-alpha3 和 AndroidX 1.0.0-alpha3
但是如果你现在不想更新到上面的版本,那么你可以这样解决(我知道这是一个不好的解决方案,但我没有看到任何其他好的方法)
在您的活动中覆盖 onDestroy 方法,并在调用 super.onDestroy 之前将所有必需的字段保存到局部变量。现在调用 super.onDestroy 然后再次初始化您的 ViewModel 并将必填字段分配回您的新 ViewModel 实例
关于isFinishing
以下代码在 Kotlin 中:
override fun onDestroy() {
if (!isFinishing) { //isFinishing will be false in case of orientation change
val oldViewModel = obtainViewModel()
val requiredFieldValue = oldViewModel.getRequiredFieldValue()
super.onDestroy
val newViewModel = obtainViewModel()
if (newViewModel != oldViewModel) { //View Model has been destroyed
newViewModel.setRequiredFieldValue(requiredFieldValue)
}
} else {
super.onDestroy
}
}
private fun obtainViewModel(): SampleViewModel {
return ViewModelProviders.of(this).get(SampleViewModel::class.java)
}