gpt4 book ai didi

android - 我可以管理生命周期所有者,用 Koin 注入(inject) viewModel 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:17 25 4
gpt4 key购买 nike

我有一个 Activity 应用程序。

我想将 viewModel 绑定(bind)到父 fragment 生命周期(FlowFragmentLogin),并与子 fragment (CellFragmentInfoFragment)。因此,当我从 FlowFragmentLogin 移动到 FlowFragmentMain 时,调用了 viewModel onCleared()

但我发现的唯一方法是在 Activity 及其 Fragment 之间共享 viewModel: https://insert-koin.io/docs/1.0/documentation/koin-android/index.html

并且无法控制生命周期所有者。这对我来说是 Not Acceptable ,至少因为这个 viewModel 会一直存在到应用程序死亡。

最佳答案

自导航2.1.0-alpha02:

You can now create ViewModels that are scoped at a navigation graph level via the by navGraphViewModels() property delegate for Kotlin users or by using the getViewModelStore() API added to NavController.

您可以找到更改日志 heredocument .

不幸的是,Koin 无法支持该功能,因为 viewModel()sharedViewModel() 绑定(bind)到 Activity。但是在 2.1.x 中已经计划支持导航,您可以跟踪 here .


现在这是我的解决方案:

  1. 在 Koin 中使用 navGraphViewModels() 代替 viewModel()
class DetailFr : Fragment() {
private val vm: DetailViewModel by navGraphViewModels(R.id.main_nav_graph)
}
  1. 使 ViwModel 实现 KoinComponent 以便我们可以使用 inject() 而不是通过构造函数注入(inject)。
class DetailViewModel : ViewModel(), KoinComponent {

private val repo: DetailRepository by inject()
// othetr objects you need
}

希望对你有帮助

关于android - 我可以管理生命周期所有者,用 Koin 注入(inject) viewModel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53902144/

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