gpt4 book ai didi

Android Hilt - 两个 fragment 之间的共享 ViewModel

转载 作者:行者123 更新时间:2023-12-04 23:52:54 32 4
gpt4 key购买 nike

我在我的项目中使用 Jetpack Navigation 和 Hilt,我想只在两个 Fragment 之间共享 ViewModel,如下所示:

  • fragment A:使用 ViewModel A
  • 在 Fragment A 中导航到 Fragment B:使用 ViewModel B
  • 在 Fragment B 中导航到 Fragment C:使用 ViewModel B 的实例
  • 如果从 C 回到 B,再回到 A,那么 ViewModel B 将被销毁。

如何像那样配置 ViewModel B?

更新:我找到了一种使用 Hilt Custom Scope 的方法,但我还不知道如何实现它。

提前致谢。

最佳答案

您可以将 activityViewModels() 与 ViewModel 一起使用,以遵循宿主 Activity 的生命周期。

class BFragment: Fragment() {
// Using the activityViewModels() Kotlin property delegate from the
// fragment-ktx artifact to retrieve the ViewModel in the activity scope
private val viewModel: BViewModel by activityViewModels()
}

class CFragment : Fragment() {

private val viewModel: CViewModel by viewModels()

private val shareViewModel: BViewModel by activityViewModels()
}

或者如果fragment C是B的子fragment,你可以自定义viewmodel的生命周期如下:

class BFragment: Fragment() {
// Using the viewModels() Kotlin property delegate from the fragment-ktx
// artifact to retrieve the ViewModel
private val viewModel: BViewModel by viewModels()
}

class CFragment: Fragment() {
// Using the viewModels() Kotlin property delegate from the fragment-ktx
// artifact to retrieve the ViewModel using the parent fragment's scope
private val shareViewModel: BViewModel by viewModels({requireParentFragment()})

private val viewModel: CViewModel by viewModels()
}

更多信息:Communicating with fragments

关于Android Hilt - 两个 fragment 之间的共享 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68836589/

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