调用ViewModel实例会重置LiveData吗?

时间:2018-08-09 07:41:33

标签: android kotlin android-livedata android-viewmodel

我在Kotlin中使用

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

要从提供程序中检索ViewModel。

在ViewModel中,我有类似的东西。

val liveChuchuData = MutableLiveData<DataChuchu>()

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

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

val liveChuchuData = MutableLiveData<DataChuchu>()

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

1 个答案:

答案 0 :(得分:5)

取决于ViewModel的父级。如果父级为Acivity,并且在您的Fragment中用ViewModel初始化getActivity()而不是传递 this ,那么您将重用该{{1 }},但是例如,如果您有两个单独的ViewModel通过将 this 传递给Fragments来初始化同一个ViewModel,则您的ViewModelProvider将有两个单独的实例和其中的不同数据。

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


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


希望这会有所帮助。祝你好运:)