首页 > 解决方案 > 调用 ViewModel 实例是否会重置 LiveData?

问题描述

在科特林我正在使用

viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)

从提供程序检索 ViewModel。

在我的 ViewModel 里面我有这样的东西。

val liveChuchuData = MutableLiveData<DataChuchu>()

据我了解,这会创建 MutableLiveData 的最终新变量,对吗?

我记得在 Java 中的 ViewModel 中声明 MutableLiveDatas 时,我们创建了一个函数,然后检查 MutableLiveData 是否为空,只创建一次。那么,如果我有一个片段也将使用相同的 ViewModel 实例怎么办。

val liveChuchuData = MutableLiveData<DataChuchu>()

一旦在片段中调用,该行会导致当前数据被重置吗?

标签: androidkotlinandroid-livedataandroid-viewmodel

解决方案


取决于您的 ViewModel 的父级是什么。如果 parent 是Acivity并且在您Fragment初始化您的ViewModelwithgetActivity()而不是传递this,那么您将重用 that ViewModel,但是例如,如果您有两个单独的通过传递thisFragments初始化相同的实例,那么您将有两个单独的实例和不同的数据。ViewModelViewModelProviderViewModel

ViewModel在两个中拥有相同的数据Fragments,您需要在创建实例时传递getActivity();给。ViewModelProviderViewModel


也就是说,的,如果您在创建时使用,它将导致您的数据被重置ViewModel


希望这可以帮助。祝你好运 :)


推荐阅读