在ViewPager2中的Fragment之间共享ViewModel

5

我有一个Fragment0,其中包含一个ViewPager2,内部可能包含1个或多个子Fragment。

enter image description here

我已经创建了一个SharedViewModel,并在父 Fragment 中进行了定义,如下所示:
val viewModel by viewModels<SharedViewModel>()

我还在每个子片段中添加了viewModel的定义。
private val sharedViewModel by viewModels<SharedViewModel>(
    ownerProducer = { requireParentFragment() }
)

我使用NavigationControl从这些子片段(即Fragment1、Fragment2和Fragment3)导航到Fragment4。我的问题是,如何与不直接是Fragment0子级的Fragment4共享相同的视图模型?我能否使用相同的方法来与Fragment4共享viewModel呢?
还是有更好的方法来处理这样的用例?

尝试在片段中使用Dagger Hilt进行ViewModel注入。 - charlie.7
Fragment4是否在与Fragment0相同的活动中显示? - Sergei Kozelko
1
如果我在ViewPager中的Fragment中使用ownerProducer = { requireParentFragment() }初始化ViewModel,就会崩溃。它说ViewPager中的Fragment不是子Fragment,而是直接附加到Activity上的。我只有一个Activity。你这边可以正常工作吗? - skafle
1个回答

0

你可以使用by viewModels({requireParentFragment()})来与父子Fragment共享ViewModel,但是在Fragment4中无法使用。

你可以使用by activityViewModels(),但这不是一个好的架构。我建议你为Fragment4创建单独的ViewModel,并通过导航共享数据。

了解更多信息,请访问https://developer.android.com/guide/fragments/communicate


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接