lor*_*nzo 3 android fragment viewmodel kotlin
我正在尝试在我的活动和片段之间共享一个 ViewModel。我的 ViewModel 包含一个report,这是一个我无法序列化的复杂对象。
protected val viewModel: ReportViewModel by lazy {
val report = ...
ViewModelProviders.of(this, ReportViewModelFactory(report)).get(ReportViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试访问片段中的视图模型,但我不想再次传递所有工厂参数。
如ViewModelProvider.get文档所述:
返回一个现有的 ViewModel 或在范围内创建一个新的
我想访问活动中定义的 ViewModel 实例,因此我尝试了以下操作,但它在逻辑上崩溃了,因为模型没有空的构造函数:
protected val viewModel: ReportViewModel by lazy {
ViewModelProviders.of(requireActivity()).get(ReportViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
应该如何在片段中访问其“工厂化”的 ViewModel?我们应该将工厂传递给片段吗?
谢谢!
小智 6
有点晚了,但我自己也有这个问题。我发现您可以执行以下操作:
在您的活动覆盖中,getDefaultViewModelProviderFactory()如下所示:
override fun getDefaultViewModelProviderFactory(): ReportViewModelFactory {
return ReportViewModelFactory(report)
}
Run Code Online (Sandbox Code Playgroud)
现在在你的片段中你可以做
requireActivity().getDefaultViewModelProviderFactory()
Run Code Online (Sandbox Code Playgroud)
得到工厂。
或者简单地实例化您的 viewModel ,例如:
private val viewModel: ReportViewModel by activityViewModels()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |