调用 ViewModel 实例会重置 LiveData 吗?

Does calling a ViewModel instance reset the LiveData?

我使用的是 Kotlin

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

从提供者处检索 ViewModel。

在我的 ViewModel 中有这样的东西。

val liveChuchuData = MutableLiveData<DataChuchu>()

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

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

val liveChuchuData = MutableLiveData<DataChuchu>()

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

取决于您的 ViewModel 的父级。如果 parent 是 Acivity 并且在你的 Fragment 中你用 getActivity() 初始化你的 ViewModel 而不是传递 this,那么你将重用它ViewModel,但是例如,如果您有两个单独的 Fragments,它们通过将 this 传递给 ViewModelProvider 来初始化相同的 ViewModel,那么您的 ViewModel 将有两个独立的实例和不同的数据。

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


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


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