如何在多个 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)
您试图以错误的方式实现目标。
我已经尝试将值提取到基础 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)
您试图以错误的方式实现目标。