Koin sharedViewModel 与 SavedStateHandle
Koin sharedViewModel with SavedStateHandle
我有一个 activity 应用程序和多个片段。其中一些片段正在使用我的视图模型,通常是这样的:
private val myViewModel: MyViewModel by sharedViewModel()
如果我想同时拥有模型 shared
并使用 SavedStateHandle 保持其状态怎么办?我不知道这是否受支持,如果支持,需要如何使用它(在托管 activity 中将 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()
- (重要!)您需要在 activity:
中声明
lateinit var savedVm: SavedStateViewModel
- (重要)您需要在 activity 中的
super.onCreate(savedInstanceState)
之后立即调用它:
savedVm = getStateViewModel()
重要的是不要对上述 (stateViewModel) 使用惰性版本。
我有一个 activity 应用程序和多个片段。其中一些片段正在使用我的视图模型,通常是这样的:
private val myViewModel: MyViewModel by sharedViewModel()
如果我想同时拥有模型 shared
并使用 SavedStateHandle 保持其状态怎么办?我不知道这是否受支持,如果支持,需要如何使用它(在托管 activity 中将 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()
- (重要!)您需要在 activity: 中声明
lateinit var savedVm: SavedStateViewModel
- (重要)您需要在 activity 中的
super.onCreate(savedInstanceState)
之后立即调用它:
savedVm = getStateViewModel()
重要的是不要对上述 (stateViewModel) 使用惰性版本。