首页 > 解决方案 > 传递“这个”和“活动!!”有什么区别?在创建 ViewModelProvider 实例时作为 ViewModelStoreOwner

问题描述

嗨,我是一名 Kotlin 学习者,想了解传递“this”和“activity!!”之间的区别!作为 ViewModelStoreOwner,同时在片段中为 ex 创建 ViewModelProvider 实例

 viewModel = ViewModelProvider(
        this,
        InventoryDetailsFragmentViewModelFactory.getInstance(activity!!.application)
    )
        .get(InventoryDetailsFragmentViewModel::class.java)

当我将其用作所有者时,有时观察者无法正常工作请帮助我了解使用此功能和活动的区别!

标签: androidkotlinandroid-activityandroid-viewmodelviewmodelproviders

解决方案


您可以将this(a Fragment) 或activity!!(a FragmentActivity) 传递给ViewModelProvider构造函数,因为两者都实现ViewModelStoreOwner接口。

a 的作用ViewModelStoreOwner是能够ViewModelStore在需要时提供 a ,其中ViewModelStore表示现有视图模型的集合:

  • 如果您使用this并将 a 传递FragmentViewModelProvider构造函数,ViewModelStore则将绑定到该Fragment. 该片段和子片段可能共享视图模型,但这些视图模型不应与其他对等片段或父片段共享。

  • 如果您使用activity!!并将 a 传递FragmentActivityViewModelProvider构造函数,ViewModelStore则将绑定到该FragmentActivity. 该活动不仅可以使用视图模型,而且该活动中使用的任何片段也可以共享该视图模型。

您需要确定您的InventoryDetailsFragmentViewModel.


推荐阅读