Koin使用SavedStateHandle共享了ViewModel [英] Koin sharedViewModel with SavedStateHandle
问题描述
我有一个活动申请和片段数量.其中一些片段正在使用我的视图模型,通常是这样的:
I have single activity application and number of fragments. Some of these fragments are using my viewmodel, typically like this:
private val myViewModel: MyViewModel by sharedViewModel()
如果我想同时拥有模型shared
并通过SavedStateHandle保持其状态怎么办?我不知道是否支持此功能,如果支持,则需要使用它(在托管活动中将viewmodel声明为stateViewModel不起作用).
What if I want to have the model both shared
and keep its state with SavedStateHandle? I cannot figure out if this is supported and if so, how it needs to be used (declaring viewmodel as stateViewModel in hosting activity is not working).
推荐答案
更新:随着koin 2.1.6的发布,他们引入了org.koin.androidx.viewmodel.ext.android.stateSharedViewModel
,您可以在片段中使用它.
Update: as koin 2.1.6 is around, they introduced org.koin.androidx.viewmodel.ext.android.stateSharedViewModel
that you can use in your fragments.
在一个小时内挖掘Koin样本并弄清楚一些陷阱后,确定:
Ok after an hour of digging Koin samples and figuring out a few gotchas:
- 假设您的视图模型与此类似:
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)
之后立即调用此名称:
- (important) You need to call this right after
super.onCreate(savedInstanceState)
in your activity:
savedVm = getStateViewModel()
重要的是,不要为上述(stateViewModel)使用惰性版本.
It is important not to use lazy version for the above (stateViewModel).
这篇关于Koin使用SavedStateHandle共享了ViewModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!