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

How can I share LiveData between multiple ViewModels?

我已经尝试将值提取到基础 class 中并让 ViewModels 扩展它。然而,当我这样做时,Observer 并没有坚持使用 LiveData。例如,当我有一个父 class 和 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) 不会通知 Fragment 中的 LiveData。

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

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)

您试图以错误的方式实现目标。