在 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
将有两个单独的实例和不同的数据。
要在两个Fragments
中ViewModel
相同的数据,您需要在创建ViewModel
实例时将getActivity();
传递给ViewModelProvider
。
也就是说,是的,如果您在创建ViewModel
时使用它,将导致您的数据被重置。
希望这有帮助。祝你好运:)