gpt4 book ai didi

java - 在屏幕中的不同 Fragment 之间共享一个 ViewModel 实例

转载 作者:行者123 更新时间:2023-12-01 19:46:27 24 4
gpt4 key购买 nike

我正在使用单一 Activity 模式,并且在一个特定屏幕中,我想与两个不同的 fragment 共享一个 View 模型。经过一番研究,我找到了以下解决方案:

  1. 我在创建 viewModel 时使用 Activity 实例,以便我的两个 fragment 获得相同的实例。但这种方法的缺点是,viewModel 实例将一直处于 Activity 状态,直到应用程序运行为止。
ViewModelProviders.of(Activity.this, viewModelFactory).get(CustomViewModel::class.java)
  • 我可以在启动第一个 fragment 时向其添加标签,并在第二个 fragment 中创建 viewModel 时传递第一个 fragment 的实例。这样,我将在两个 fragment 之间共享一个 ViewModel 实例。ViewModelProviders.of(fragmentManager?.findFragmentByTag(TAG)!!, viewModelFactory).get(CustomViewModel::class.java)

  • 我在某处读到了另一种方法来共享 viewModel,但我忘记了,因为它对我不起作用。

  • 我想知道哪种方法最适合跨 fragment 共享 viewModel。我在这里有什么选择?谢谢。

    最佳答案

    根据docs以下是如何与多个 fragment 共享同一个 ViewModel。

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

    其在文档中的解释如下:

    Notice that both fragments retrieve the activity that contains them. That way, when the fragments each get the ViewModelProvider, they receive the same SharedViewModel instance, which is scoped to this activity.

    [更新]您可以在 fragment 中使用 kotlin 属性委托(delegate)

    private val model: SharedViewModel by activityViewModels()

    Official docs

    关于java - 在屏幕中的不同 Fragment 之间共享一个 ViewModel 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120496/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com