调用 ViewModel 实例是否会重置实时数据?



在 Kotlin 中,我正在使用

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

从提供程序检索视图模型。

在我的视图模型中,我有这样的东西。

val liveChuchuData = MutableLiveData<DataChuchu>()

根据我的理解,这创建了一个可变实时数据的最终新变量,对吗?

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

val liveChuchuData = MutableLiveData<DataChuchu>()

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

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

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


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


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

相关内容

  • 没有找到相关文章