在三个片段之间共享 ViewModel

5
我有三个碎片 A、B 和 C。B 和 C 是 A 的子碎片。我该如何让它们共享同一个视图模型。 根据这篇中介绍的方法,以下是我应该执行的步骤:

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

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


如果B和C是A的子级,那么您可以定义一个SharedViewModel,其作用域为A的生命周期,并且可以与B和C共享。 - Ajeeli
我该怎么做? - Gilbert
1个回答

9

你尝试过像这样的方法吗?将你的视图模型注入到你的主根片段A中:

class FragmentA : Fragment() {

    val viewModel: SharedViewModel by viewModels()
}

现在您应该能够像这样从BC访问此视图模型:

class FragmentB : Fragment() {

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

1
你真是救命恩人!我不知道它是如何工作的,但它确实起作用了。非常感谢。 - Gilbert
你好,如果我在父Fragment没有观察ViewModel的情况下尝试从子Fragment访问ViewModel,则会出现错误。'java.lang.RuntimeException: Cannot create an instance of class com.lokech.taxi.newjourney.NewJourneyViewModel'。我该如何处理它? - Gilbert
一切都好了。我在某人的帮助下修复了它:https://stackoverflow.com/a/62041088/10030693 - Gilbert

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