我正在尝试在我的活动和片段之间共享一个ViewModel。我的ViewModel包含一个report
,这是我无法序列化的复杂对象。
protected val viewModel: ReportViewModel by lazy {
val report = ...
ViewModelProviders.of(this, ReportViewModelFactory(report)).get(ReportViewModel::class.java)
}
现在,我正在尝试访问片段中的viewmodel,但是我不想再次传递所有工厂参数。
如ViewModelProvider.get
文档所述:
返回现有的ViewModel或在范围内创建新的ViewModel
我想访问活动中定义的ViewModel实例,所以我尝试了以下操作,但是由于模型没有空的构造函数,因此在逻辑上会崩溃:
protected val viewModel: ReportViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(ReportViewModel::class.java)
}
如何在一个片段中访问其“出厂”的ViewModel?我们应该把工厂交给碎片吗?
谢谢!
答案 0 :(得分:2)
有点晚了,但是我自己有这个问题。我发现您可以执行以下操作:
在您的活动中像这样覆盖getDefaultViewModelProviderFactory()
:
override fun getDefaultViewModelProviderFactory(): ReportViewModelFactory {
return ReportViewModelFactory(report)
}
现在您可以在片段中了
requireActivity().getDefaultViewModelProviderFactory()
去工厂。
或者简单地实例化您的viewModel:
private val viewModel: ReportViewModel by activityViewModels()