我有一个Fragment0,它包含一个ViewPager2,而ViewPager2内部可能包含一个或多个子片段。
我已经创建了一个SharedViewModel并在Parent片段中定义了它,如下所示:
val viewModel by viewModels<SharedViewModel>()
我还在每个子片段中添加了viewModel的定义。
private val sharedViewModel by viewModels<SharedViewModel>(
ownerProducer = { requireParentFragment() }
)
我使用NavigationControl从每个子片段(即Fragment1、Fragment2和Fragment3)导航到Fragment4。我的问题是,我如何与Fragment4共享同一个视图模型,因为Fragment4不是Fragment0的直接子片段。我是否也可以使用相同的方法与Fragment4共享视图模型?
或者有没有更好的方法来处理这样的用例?
1条答案
按热度按时间w8biq8rn1#
您只能使用
by viewModels({requireParentFragment()})
与父片段和子片段共享视图模型。它不能与fragment4一起使用。您可以使用
by activityViewModels()
。但这不是一个好的架构。我建议您为Fragment4创建单独的视图模型,并与导航共享数据。从此处查找更多信息:https://developer.android.com/guide/fragments/communicate