我正在实现MVVM和数据绑定,并且试图了解何时应该在LiveData上使用Observable字段?
我已经遍历了不同的文档,发现LiveData是生命周期感知的,但是在Github的示例代码中,这两个代码同时在ViewModel中使用。因此,如果LiveData优于Observable字段,我会感到困惑,为什么不只使用LiveData?
答案 0 :(得分:3)
两个都有用例,例如:
如果您希望UI状态模型具有生命周期容忍的容器,那么答案是LiveData
。
如果要在视图模型中的逻辑发生更改时使UI更新,请使用ObservableFields
。
我本人更喜欢使用LivaData
和ObservableField/BaseObservable
的组合,LiveData
通常将充当生命周期感知数据容器,并充当VM和View之间的通道。
另一方面,通过LiveData
发出的UI状态模型对象本身就是BaseObservable
或其字段为ObservableField
。
这样,我可以使用LiveData
来更改UI状态。
并每当要更新一小部分UI时,将值设置为UI状态模型ObservableField
字段。
编辑: 例如,这是有关UserProfile组件的快速说明:
UIStateModel
data class ProfileUIModel(
private val _name: String,
private val _age: Int
): BaseObservable() {
var name: String
@Bindable get() = _name
set(value) {
_name = value
notifyPropertyChanged(BR.name)
}
var age: Int
@Bindable get() = _age
set(value) {
_age = value
notifyPropertyChanged(BR.age)
}
}
ViewModel
class UserProfileViewModel: ViewModel() {
val profileLiveData: MutableLiveData = MutableLiveData()
...
// When you need to rebind the whole profile UI object.
profileLiveData.setValue(profileUIModel)
...
// When you need to update a specific part of the UI.
// This will trigger the notifyPropertyChanged method on the bindable field "age" and hence notify the UI elements that are observing it to update.
profileLiveData.getValue().age = 20
}
查看
您将观察LiveData配置文件的正常变化。
XML
您将使用数据绑定来绑定UI状态模型。
答案 1 :(得分:0)
只要要观察LiveData
,就可以一直使用LifecycleOwner
。我更喜欢将仅与ViewModel
相关的绑定字段保留为Observable
,对于状态更改也与LiveData
或{{1}相关的字段,请使用Activity
}。
答案 2 :(得分:0)
LiveData-与LifecycleOwner一起使用,例如活动或片段
可观察-与数据绑定一起使用