我有单个活动应用程序和片段数量。其中一些片段正在使用我的视图模型,通常如下所示:
private val myViewModel: MyViewModel by sharedViewModel()
如果我想同时拥有模型怎么办shared
并用 SavedStateHandle 保持其状态?我无法弄清楚这是否受支持,如果是,则需要如何使用它(在托管活动中将 viewmodel 声明为 stateViewModel 不起作用)。
更新:随着 koin 2.1.6 的到来,他们引入了org.koin.androidx.viewmodel.ext.android.stateSharedViewModel
您可以在片段中使用它。
好吧,经过一个小时的挖掘 Koin 样本并找出一些问题后:
- 假设您的视图模型与此类似:
class SavedStateViewModel(val handle: SavedStateHandle, val service: SimpleService)
- ...你的 DI 看起来像这样:
viewModel { (handle: SavedStateHandle) -> SavedStateViewModel(handle, get()) }
- 您的共享状态视图模型可以在片段中使用,如下所示:
val sharedSaved: SavedStateViewModel by sharedViewModel()
- (重要!)您的活动中需要此声明:
lateinit var savedVm: SavedStateViewModel
- (重要)你需要在之后立即调用它
super.onCreate(savedInstanceState)
在您的活动中:
savedVm = getStateViewModel()
重要的是不要使用上述的惰性版本(stateViewModel)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)