Ant*_*sky 5 lifecycle android viewmodel kotlin koin
我有一个活动应用程序。
我想视图模型绑定到父片段生命周期(FlowFragmentLogin),并与孩子片段分享(CellFragment,InfoFragment,etc)。这样,当我从FlowFragmentLogin移到时FlowFragmentMain,调用了viewModel onCleared()。
但是我发现的唯一方法是在Activity和片段之间共享viewModel:https ://insert-koin.io/docs/1.0/documentation/koin-android/index.html
而且无法控制生命周期所有者。Wich对我来说是不可接受的,至少是因为该viewModel将一直存在直到应用程序终止。
自导航以来2.1.0-alpha02:
现在,您可以通过 Kotlin 用户的 navGraphViewModels() 属性委托或使用添加到 NavController 的 getViewModelStore() API 创建范围在导航图级别的 ViewModel。
不幸的是,Koin 无法支持该功能,因为viewModel()或sharedViewModel()与 Activity 绑定。但对 nav 的支持已经计划好了2.1.x,您可以在这里跟踪。
现在这是我的解决方案:
navGraphViewModels()而不是viewModel()。class DetailFr : Fragment() {
private val vm: DetailViewModel by navGraphViewModels(R.id.main_nav_graph)
}
Run Code Online (Sandbox Code Playgroud)
KoinComponent,以便我们可以使用by inject()而不是通过构造函数注入。class DetailViewModel : ViewModel(), KoinComponent {
private val repo: DetailRepository by inject()
// othetr objects you need
}
Run Code Online (Sandbox Code Playgroud)
希望这有帮助
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |