随着 Android 架构组件的稳定,我开始将所有基本的
我喜欢使用
这个问题已经被报告了(GitHub和Stack Overflow),最初说版本1.0会有这个功能,现在说这个功能正在开发中。
为了同时使用
基本上,我的 ObservableMutableLiveData 是 ObservableField 的一个副本,使用 LiveData 存储模型,在此实现中,布局在每次模型更新后都会更新。
问题是:
ViewModel
更新到新的ViewModel
实现。在我看来,建议使用LiveData
来保存Model
类,因为它可以更好地处理生命周期。我喜欢使用
Data Binding
,因为它使得 Java/Kotlin 代码更清晰,并且不需要“观察”值的变化以更新 UI。但是,只有当Model
(或 ViewModel)扩展 BaseObservable
时,使用Data Binding
的布局才会监听数据的变化,而LiveData
则不会。我理解 LiveData
的主要目标之一是被观察并通过编程方式更新 UI,但对于简单的更新,Data Binding
非常有用。这个问题已经被报告了(GitHub和Stack Overflow),最初说版本1.0会有这个功能,现在说这个功能正在开发中。
为了同时使用
LiveData
和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。这是正确的吗?