如何在多个ViewModel之间共享LiveData?

时间:2019-03-27 00:34:32

标签: android kotlin android-architecture-components android-livedata

我尝试将值提取到基类中,并让ViewModels对其进行扩展。但是,当我这样做时,观察者并没有坚持使用LiveData。例如,当我有一个带有LiveData的父类时:

class Base : ViewModel() { 
    private val _ data = MutableLiveData()
    val data: LiveData = _data

    fun someEvent(foo: Foo) { // update _data }
}

class Derived : Base()

class Derived1 : Base()

然后获取其中一个ViewModel并观察data

class Frag : Fragment {
    onViewCreated() {
        // get Derived, ViewModelProviders.of ...etc
       derived.data.observe { // Doesn't observe changes }
    }
}

调用Base.someEvent(foo)不会通知片段中的LiveData。

我想避免同时引用两个子类并在每个子类上调用someEvent。需要注意的一件事是,我使用的是单一Activity方法,并且所有ViewModel都是Activity范围的。

1 个答案:

答案 0 :(得分:1)

class Derived : Base()

class Derived1 : Base()

有自己的实例:

private val _ data = MutableLiveData()
val data: LiveData = _data

这意味着您需要

derived.data.observe { // do something }
derived1.data.observer { // do something }
derived.someEvent(someFoo)
derived1.someEvent(someFoo)

您正在尝试以错误的方式实现目标。