Оба варианта имеют свои варианты использования, например:
Если вы хотите использовать допустимый контейнер жизненного цикла для вашей модели состояния пользовательского интерфейса, LiveData
- это ответ.
Если вы хотите, чтобы пользовательский интерфейс обновлялся при изменении части логики в вашей модели представления, тогда используйте ObservableFields
.
Я сампредпочитая использовать комбинацию LivaData
и ObservableField/BaseObservable
, LiveData
обычно будет вести себя как контейнер данных с учетом жизненного цикла, а также как канал между виртуальной машиной и представлением.
С другой стороны,Объекты модели состояния пользовательского интерфейса, которые выводятся через LiveData
, сами BaseObservable
или имеют свои поля как ObservableField
.
Таким образом, я могу использовать LiveData
для общего изменения состояния пользовательского интерфейса.И устанавливайте значения в полях модели состояния пользовательского интерфейса 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
Вы будете использовать привязку данных для привязки модели состояния пользовательского интерфейса.
Редактировать : Теперь зрелый Я предпочитает Неизменность вместо того, чтобы иметь изменяемые свойства, как объяснено в ответе.