【发布时间】:2019-09-13 13:46:19
【问题描述】:
假设有 2 个类:
class MyLiveData:LiveData<Int>()
class MyMutableLiveData:MutableLiveData<Int>()
允许从MutableLiveData 转换为LiveData:
val ld1=MutableLiveData<Int>()
val ld2:LiveData<Int> = ld1 //ok
但您不能以这种方式转换自己的实现:
val mutable=MyMutableLiveData()
val immutable:MyLiveData = mutable //type missmatch
我知道 MutableLiveData 扩展 LiveData 这就是为什么它们是可转换的。但我不能让 MyMutableLiveData 扩展 MyLiveData 因为在这种情况下它不会是可变的
有任何解决方法吗?
UPD:我想我需要表现出扩展LiveData的动机。我正在尝试实现MutableLiveDataCollection,它通知的不仅仅是价值通过setValue/postValue 进行更改,但也可以修改值,例如添加新元素。我很惊讶没有针对此的本地解决方案。
无论如何,要观察modify 事件,必须有额外的观察方法。并且此方法必须在不可变部分中,即LiveDataCollection,因为视图会调用它。恕我直言,继承是自然的解决方案。
【问题讨论】:
-
我的
LiveData的数据类型是ArrayList。我需要特定的观察方法来订阅观察像new items were added to array这样的事件 -
你有什么建议?
标签: kotlin android-livedata mutablelivedata