android - 传递“这个”和“活动!!”有什么区别?在创建 ViewModelProvider 实例时作为 ViewModelStoreOwner
问题描述
嗨,我是一名 Kotlin 学习者,想了解传递“this”和“activity!!”之间的区别!作为 ViewModelStoreOwner,同时在片段中为 ex 创建 ViewModelProvider 实例
viewModel = ViewModelProvider(
this,
InventoryDetailsFragmentViewModelFactory.getInstance(activity!!.application)
)
.get(InventoryDetailsFragmentViewModel::class.java)
当我将其用作所有者时,有时观察者无法正常工作请帮助我了解使用此功能和活动的区别!
解决方案
您可以将this
(a Fragment
) 或activity!!
(a FragmentActivity
) 传递给ViewModelProvider
构造函数,因为两者都实现了ViewModelStoreOwner
接口。
a 的作用ViewModelStoreOwner
是能够ViewModelStore
在需要时提供 a ,其中ViewModelStore
表示现有视图模型的集合:
如果您使用
this
并将 a 传递Fragment
给ViewModelProvider
构造函数,ViewModelStore
则将绑定到该Fragment
. 该片段和子片段可能共享视图模型,但这些视图模型不应与其他对等片段或父片段共享。如果您使用
activity!!
并将 a 传递FragmentActivity
给ViewModelProvider
构造函数,ViewModelStore
则将绑定到该FragmentActivity
. 该活动不仅可以使用视图模型,而且该活动中使用的任何片段也可以共享该视图模型。
您需要确定您的InventoryDetailsFragmentViewModel
.