Koin使用SavedStateHandle共享了ViewModel [英] Koin sharedViewModel with SavedStateHandle

查看:547
本文介绍了Koin使用SavedStateHandle共享了ViewModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个活动申请和片段数量.其中一些片段正在使用我的视图模型,通常是这样的:

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:

  1. 假设您的视图模型与此类似:

class SavedStateViewModel(val handle: SavedStateHandle, val service: SimpleService) 

  1. ...您的DI看起来像这样:

viewModel { (handle: SavedStateHandle) -> SavedStateViewModel(handle, get()) }

  1. 您的共享状态视图模型可以像这样在片段中使用:

val sharedSaved: SavedStateViewModel by sharedViewModel()

  1. (重要!)您在活动中需要以下声明:

lateinit var savedVm: SavedStateViewModel

  1. (重要)您需要在活动中的super.onCreate(savedInstanceState)之后立即调用此名称:
  1. (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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆