我有一个包含2个片段的活动,每个片段包含各种自定义视图。
如何在这些自定义视图之间共享ViewModel?
碎片
private val mainViewModel: MainViewModel by activityViewModels()
- 自定义视图-
private val mainViewModel by lazy {
ViewModelProvider(findViewTreeViewModelStoreOwner()!!).get<MainViewModel>()
}
问题是**findViewTreeViewModelStoreOwner()**返回Fragment而不是Activity,从而创建新的ViewModel而不是共享现有的ViewModel。
是否有任何方法可以在自定义视图之间共享活动视图模型?
1条答案
按热度按时间wlwcrazw1#
发生这种情况是因为自定义视图中的
findViewTreeViewModelStoreOwner()
返回Fragment而不是Activity,因为您的视图已附加到Fragment,因此此方法返回Fragment。您可以尝试将
View
的Activity
显式转换为ViewModelStoreOwner
,并从使用本练习创建的ViewModelProvider
中获取ViewModel
。然后,必须返回Activity的ViewModel
(Kotlin会自动将Activity类型转换为ViewModelStoreOwner,但只是为了清楚起见):