我尝试将值提取到基类中,并让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范围的。
答案 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)
您正在尝试以错误的方式实现目标。