调用ViewModel实例会重置LiveData吗?

Hir*_*eri 3 android kotlin android-livedata android-viewmodel

在Kotlin我正在使用

viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

从提供程序检索ViewModel.

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

val liveChuchuData = MutableLiveData<DataChuchu>()
Run Code Online (Sandbox Code Playgroud)

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

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

val liveChuchuData = MutableLiveData<DataChuchu>()
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*kis 6

取决于ViewModel的父级是什么.如果父母是Acivity和你的Fragment,你初始化ViewModelgetActivity()的,而不是通过这个,那么你将重复使用ViewModel,但例如,如果您有两个单独的Fragments用于初始化同样ViewModel通过传递ViewModelProvider那么你ViewModel将有两个单独的实例,并在其中不同的数据.

ViewModel在两个中包含相同的数据Fragments,您需要在创建实例时传递getActivity();给它.ViewModelProviderViewModel


这就是说,YES,它会导致如果你使用你的数据重置创建时ViewModel.


希望这可以帮助.祝好运 :)