【问题标题】:Koin sharedViewModel with SavedStateHandleKoin sharedViewModel 与 SavedStateHandle
【发布时间】:2020-04-19 19:27:07
【问题描述】:

我有单个活动应用程序和片段数。其中一些片段正在使用我的视图模型,通常是这样的:

private val myViewModel: MyViewModel by sharedViewModel()

如果我想同时拥有模型 shared 并使用 SavedStateHandle 保持其状态怎么办?我不知道这是否受支持,如果支持,需要如何使用(在托管活动中将 viewmodel 声明为 stateViewModel 不起作用)。

【问题讨论】:

    标签: android androidx android-viewmodel android-mvvm koin


    【解决方案1】:

    更新:随着 koin 2.1.6 的发布,他们引入了org.koin.androidx.viewmodel.ext.android.stateSharedViewModel,您可以在片段中使用它。


    经过一个小时挖掘 Koin 样本并找出一些问题后,好的:

    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) 之后立即调用它:
    savedVm  = getStateViewModel() 
    

    重要的是不要对上述情况使用惰性版本(stateViewModel)。

    【讨论】:

    • 你在android app项目中工作过koin multi module吗
    • 不。干净的建筑材料?是的,但它不适合大多数现实生活中的项目(太复杂,好处很少)。夸大其词!
    • 难道您还必须在活动中注入保存的状态句柄吗? Activity如何在不将句柄作为参数传递的情况下创建SavedStateViewModel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多