繁体   English   中英

传递“这个”和“活动!!”有什么区别? 在创建 ViewModelProvider 实例时作为 ViewModelStoreOwner

[英]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)

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

您可以通过thisFragment )或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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM