[英]What ViewModelStoreOwner to use for ViewModelProvider in Fragment?
[英]What is the difference between passing“this” and “activity!!” as a ViewModelStoreOwner while creating ViewModelProvider instance
嗨,我是 Kotlin 学习者,想了解传递“这个”和“活动!!”之间的区别! 作为 ViewModelStoreOwner 在片段中为 ex 创建 ViewModelProvider 实例
viewModel = ViewModelProvider(
this,
InventoryDetailsFragmentViewModelFactory.getInstance(activity!!.application)
)
.get(InventoryDetailsFragmentViewModel::class.java)
当我将其用作所有者时,有时观察者无法正常工作请帮助我了解使用此功能和活动的区别!
您可以通过this
( Fragment
)或activity!!
(一个FragmentActivity
)到ViewModelProvider
构造函数,因为它们都实现了ViewModelStoreOwner
接口。
ViewModelStoreOwner
的作用是能够在需要时提供ViewModelStore
,其中ViewModelStore
代表现有视图模型的集合:
如果您使用this
并将Fragment
传递给ViewModelProvider
构造函数,则ViewModelStore
将绑定到该Fragment
。 该片段和子片段可能共享视图模型,但这些视图模型不应与其他对等片段或父片段共享。
如果您使用activity!!
并将FragmentActivity
传递给ViewModelProvider
构造函数, ViewModelStore
将绑定到该FragmentActivity
。 该活动不仅可以使用视图模型,而且该活动中使用的任何片段也可以共享该视图模型。
您需要确定InventoryDetailsFragmentViewModel
tailsFragmentViewModel 的正确 scope 是什么。
“this”的意思是“Context”,也就是你实例化viewModel的Fragment。
从您提供的代码中,我可以理解“this”=“InventoryDetailsFragment”,即>您实例化 viewModel 的 class。
您的代码应如下所示
val application = requireNotNull(activity).application
viewModelFactory = InventoryDetailsFragmentViewModelFactory(application)
viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(InventoryDetailsFragmentViewModel::class.java)
如果您想查看在项目中使用 ViewModel 和 ViewModelFactory 的示例,请访问此链接示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.