【问题标题】:Shared ViewModel between Fragments with viewPager2使用 viewPager2 在 Fragment 之间共享 ViewModel
【发布时间】:2022-11-10 00:09:31
【问题描述】:

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

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

val viewModel by viewModels<SharedViewModel>()

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

private val sharedViewModel by viewModels<SharedViewModel>(
    ownerProducer = { requireParentFragment() }
)

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

还是有更好的方法来处理这样的用例?

【问题讨论】:

  • 尝试在片段中使用 Dagger hilt 进行 ViewModel 注入。
  • Fragment4 是否显示在与 Fragment0 相同的活动中?
  • 对我来说,如果我使用... ownerProducer = { requireParentFragment() }... 在 vi​​ewpager 内的片段中初始化 viewmodel... 我会崩溃。它说,viewpager 内的片段不是子片段,它直接附加到活动。我只有一个活动。对你起作用吗?

标签: android kotlin android-fragments viewmodel android-viewmodel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多