我正在尝试在我的 Activity 和我的 fragment 之间共享一个 ViewModel。我的 ViewModel 包含一个 report
,这是一个我无法序列化的复杂对象。
protected val viewModel: ReportViewModel by lazy {
val report = ...
ViewModelProviders.of(this, ReportViewModelFactory(report)).get(ReportViewModel::class.java)
}
现在我正在尝试访问 fragment 中的 View 模型,但我不想再次传递所有工厂参数。
如 ViewModelProvider.get
文档所述:
Returns an existing ViewModel or creates a new one in the scope
我想访问 Activity 中定义的 ViewModel 实例,所以我尝试了以下操作,但由于模型没有空的构造函数,它在逻辑上崩溃了:
protected val viewModel: ReportViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(ReportViewModel::class.java)
}
应该如何在 fragment 中访问其“工厂化”的 ViewModel?我们应该将工厂传递给 fragment 吗?
谢谢!
最佳答案
有点晚了,但我自己也有这个问题。我发现您可以执行以下操作:
在你的 Activity 覆盖 getDefaultViewModelProviderFactory()
像这样:
override fun getDefaultViewModelProviderFactory(): ReportViewModelFactory {
return ReportViewModelFactory(report)
}
现在你可以在你的 fragment 中做
requireActivity().getDefaultViewModelProviderFactory()
去工厂。
或者简单地实例化您的 viewModel,例如:
private val viewModel: ReportViewModel by activityViewModels()
关于android - 在 Fragment 中使用 ViewModelFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233784/