【问题标题】:Does calling a ViewModel instance reset the LiveData?调用 ViewModel 实例是否会重置 LiveData?
【发布时间】:2018-08-09 07:41:33
【问题描述】:

在我使用的 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>()

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

【问题讨论】:

    标签: android kotlin android-livedata android-viewmodel


    【解决方案1】:

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

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


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


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

    【讨论】:

    • 太棒了 - 谢谢兄弟 - 作品。仍然感觉像是谷歌解决问题的补丁,而不是精心设计的解决方案。单一责任原则被打破
    • 嗨,在我的代码中,在同一个片段中,我有明确的实时数据并在用户搜索时设置新的实时数据。请帮助我如何清除实时数据?
    • @SAndroidD 我建议你创建一个新问题,因为它与当前上下文无关。
    • 我不会重置同一片段中的实时数据
    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多