随着 Android 架构组件的稳定,我开始将所有基本组件更新ViewModel
为ViewModel
. 据我了解,LiveData
建议使用 来保存Model
类,因为它可以更好地处理生命周期。
我喜欢使用Data Binding
它,因为它使 Java/Kotlin 端的代码更清晰,并且不需要“观察”值更改来更新 UI。但是,如果(或 ViewModel)扩展而没有扩展,则Data Binding
仅使用监视数据的布局会发生变化。我了解主要目标之一是以编程方式观察和更新 UI,但对于简单的更新,非常有用。Model
BaseObservable
LiveData
LiveData
Data Binding
这个问题已经被报道过(GitHub和Stack Overflow),首先说 1.0 版会有这个问题,现在据说这个功能正在开发中。
为了同时使用LiveData
and Data Binding
,我创建了一个非常简单的扩展类实现BaseObservable
:
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.databinding.BaseObservable
class ObservableMutableLiveData<T>() : BaseObservable() {
private var data: MutableLiveData<T> = MutableLiveData()
constructor(data: T) : this() {
this.data.value = data
}
public fun set(value: T) {
if (value != data.value) {
data.value = value
notifyChange()
}
}
public fun get(): T? {
return data.value
}
public fun getObservable(): LiveData<T> {
return data
}
}
所以基本上我ObservableMutableLiveData
的是用于存储模型的副本,并且ObservableField
通过LiveData
这个实现,每次模型更新后布局都会更新。
问题是:
- 这是一个糟糕的实现
LiveData
吗?这个包装器是否“破坏”了 的功能LiveData
,例如生命周期感知? - 在我的理解中,
LiveData
是新的ObservableField
. 这个对吗?