【发布时间】:2020-11-07 02:33:40
【问题描述】:
我在 Fragment A 上有 viewModel,我以这种方式加载:
viewModel = ViewModelProvider(this, viewModelFactory).get(AFragmentVM::class.java)
然后从片段 A,我转到片段 B。这可以在片段 B 上使用相同的视图模型吗?在 Fragment B 我尝试过(如在文档中):
private val viewModel: AFragmentVM by activityViewModels()
但我在尝试使用此 ViewModel 时遇到异常:
java.lang.RuntimeException: Cannot create an instance of class ...AFragmentVM
...
BFragment.getViewModel(Unknown Source:2)
BFragment.onCreateView(ChartFragment.kt:40)
...
Caused by: java.lang.NoSuchMethodException: ...AFragmentVM.<init> [class android.app.Application]
编辑:
根据@SebastienRieu 和@IntelliJ Amiya 的回答,我所要做的就是以这种方式在片段A 上创建ViewModel:
viewModel = ViewModelProvider(requireActivity(), viewModelFactory).get(AFragmentVM::class.java)
或者:
viewModel = ViewModelProvider(let {activity}!!,viewModelFactory).get(AFragmentVM::class.java)
然后我可以在片段 B 上使用:
private val viewModel: AFragmentVM by activityViewModels()
【问题讨论】:
标签: android kotlin mvvm viewmodel