【问题标题】:Sharing ViewModel between three fragments在三个片段之间共享 ViewModel
【发布时间】:2020-05-16 20:12:20
【问题描述】:

我有三个片段 A、B 和 C。B 和 C 是 A 的子片段。如何让所有三个片段共享同一个视图模型。 来自this中号文章,这是我应该做的:


viewModel = activity?.run {
        ViewModelProviders.of(this)[SharedViewModel::class.java]
    } ?: throw Exception("Invalid Activity")       
}

然而,这个是关于在两个片段和一个活动之间共享一个视图模型,因此在我的情况下它不能正常工作。

【问题讨论】:

  • 如果 B 和 C 是孩子或 A,那么您可以定义一个 SharedViewModel 范围为 A 的生命周期,它可以与 B 和 C 共享。
  • 我该怎么做?

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


【解决方案1】:

你尝试过这样的事情吗?将您的视图模型注入您的主根片段A

class FragmentA : Fragment() {

    val viewModel: SharedViewModel by viewModels()
}

现在您应该可以像这样从BC 访问这个视图模型:

class FragmentB : Fragment() {

    val viewModel: SharedViewModel by viewModels(
        ownerProducer = { this.requireParentFragment() }
    )
}

【讨论】:

  • 你是救生员!我不知道它是如何工作的,但它确实有效。非常感谢
  • 您好,如果在 parentFragment 未观察 viewModel 时尝试从 childFragment 访问 viewModel,则会出现错误。 “java.lang.RuntimeException:无法创建 com.lokech.taxi.newjourney.NewJourneyViewModel 类的实例”。我该如何处理。
  • 一切都很好。我在某人的帮助下修复了它:stackoverflow.com/a/62041088/10030693
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2010-11-12
相关资源
最近更新 更多