Koin sharedViewModel with SavedStateHandle

余生颓废 提交于 2020-06-16 01:30:32

问题


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()

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).


回答1:


Update: as koin 2.1.6 is around, they introduced org.koin.androidx.viewmodel.ext.android.stateSharedViewModel that you can use in your fragments.


Ok after an hour of digging Koin samples and figuring out a few gotchas:

  1. Assuming your view model is something similar to this:
class SavedStateViewModel(val handle: SavedStateHandle, val service: SimpleService) 
  1. ...and your DI looks like this:
viewModel { (handle: SavedStateHandle) -> SavedStateViewModel(handle, get()) }
  1. Your shared state view model can be consumed in your fragments like this:
val sharedSaved: SavedStateViewModel by sharedViewModel()
  1. (important!) You need this declaration in your activity:
lateinit var savedVm: SavedStateViewModel
  1. (important) You need to call this right after super.onCreate(savedInstanceState) in your activity:
savedVm  = getStateViewModel() 

It is important not to use lazy version for the above (stateViewModel).



来源:https://stackoverflow.com/questions/61310373/koin-sharedviewmodel-with-savedstatehandle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!