android-fragments 使用viewPager2在片段之间共享ViewModel

sq1bmfud  于 2022-11-13  发布在  Android
关注(0)|答案(1)|浏览(332)

我有一个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共享视图模型?
或者有没有更好的方法来处理这样的用例?

w8biq8rn

w8biq8rn1#

您只能使用by viewModels({requireParentFragment()})与父片段和子片段共享视图模型。它不能与fragment4一起使用。
您可以使用by activityViewModels()。但这不是一个好的架构。我建议您为Fragment4创建单独的视图模型,并与导航共享数据。
从此处查找更多信息:https://developer.android.com/guide/fragments/communicate

相关问题