我可能错过了一些明显的东西,但是...我正在DiaryViewModel
类中的uiModel
中存储数据,由于使用了架构组件,我期望数据能够通过屏幕旋转保留下来,但实际上并没有。我不知道原因在哪里。
这是一个简化的片段。
class DiaryFragment: Fragment() {
private lateinit var viewModel: DiaryViewModel
override onCreateView(...) {
viewModel = ViewModelProviders.of(this).get(DiaryViewModel::class.java)
viewModel.getModel().observe(this, Observer<DiaryUIModel> { uiModel ->
render(uiModel)
})
}
}
以及对应的视图模型。
class DiaryViewModel: ViewModel() {
private var uiModel: MutableLiveData<DiaryUIModel>? = null
fun getModel(): LiveData<DiaryUIModel> {
if (uiModel == null) {
uiModel = MutableLiveData<DiaryUIModel>()
uiModel?.value = DiaryUIModel()
}
return uiModel as MutableLiveData<DiaryUIModel>
}
}
有谁能看出这个简单示例中缺少了什么?现在,当屏幕旋转时,uiModel
被设置为null
。
Lifecycles
的支持(虽然不确定这是否是你遇到的问题的原因)。 - John O'Reillyactivity
传递给ViewModelProviders.of()
,但您还需要检查它是否适用于您的特定用例(示例如 https://developer.android.com/topic/libraries/architecture/viewmodel.html#sharing 所示)。 - John O'Reilly