使用 viewPager2 在 Fragment 之间共享 ViewModel

Qed*_*rix 5 android viewmodel android-fragments kotlin android-viewmodel

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

在此输入图像描述

我创建了一个 SharedViewModel 并在 Parent 片段中定义它,如下所示:

val viewModel by viewModels<SharedViewModel>()
Run Code Online (Sandbox Code Playgroud)

我还在每个子片段中添加了 viewModel 的定义。

private val sharedViewModel by viewModels<SharedViewModel>(
    ownerProducer = { requireParentFragment() }
)
Run Code Online (Sandbox Code Playgroud)

我使用 NavigationControl 从每个子片段即导航到 Fragment4。片段 1、片段 2 和片段 3。我的问题是,如何与 Fragment4 共享相同的视图模型,它不是 Fragment0 的直接子级。我可以使用相同的方法与 Fragment4 共享 viewModel 吗?

或者有更好的方法来处理这样的用例吗?

fai*_*izy 0

您只能用于by viewModels({requireParentFragment()})与父片段和子片段共享视图模型。它不适用于fragment4。

您可以使用by activityViewModels()。但这不是好的架构。我建议您为 Fragment4 创建单独的视图模型并与导航共享数据。

从这里找到更多信息: https: //developer.android.com/guide/fragments/communicate