我在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>()
一旦在片段中调用,该行会导致当前数据被重置吗?
答案 0 :(得分:5)
取决于ViewModel的父级。如果父级为Acivity
,并且在您的Fragment
中用ViewModel
初始化getActivity()
而不是传递 this ,那么您将重用该{{1 }},但是例如,如果您有两个单独的ViewModel
通过将 this 传递给Fragments
来初始化同一个ViewModel
,则您的ViewModelProvider
将有两个单独的实例和其中的不同数据。
要在两个ViewModel
中的ViewModel
中拥有相同的数据,则在创建Fragments
实例时需要将getActivity();
传递给ViewModelProvider
。
也就是说,是,如果在创建ViewModel
时使用 this ,这将导致您的数据被重置。
希望这会有所帮助。祝你好运:)