调用 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,将导致您的数据被重置。
希望这对您有所帮助。祝你好运:)
我使用的是 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,将导致您的数据被重置。
希望这对您有所帮助。祝你好运:)