Uso de LiveData con data binding

Con la estabilización de Android Architecture Components comencé a actualizar todos mis ViewModel básicos a la nueva implementación de ViewModel . Según entiendo, se recomienda el uso de LiveData para mantener la class Model , ya que maneja mejor el ciclo de vida.

Me gusta usar la Data Binding porque hace que el código sea más claro en Java / Kotlin y no es necesario para "ver" los cambios de valores para actualizar la interfaz de usuario. Sin embargo, el layout que utiliza Enlace de Data Binding solo mira cambios de datos si el Model (o el Model vista) extiende BaseObservable y LiveData no lo hace. Entiendo que uno de los principales objectives de LiveData debe ser observado y actualiza la IU mediante progtwigción, pero para las actualizaciones simples, la Data Binding es muy útil.

Este problema ya se informó ( GitHub y Stack Overflow ) y primero se dijo que la versión 1.0 lo tendría y ahora se dice que esta característica está en desarrollo.

Para usar LiveData y Data Binding , creé una implementación muy simple de la class que extiende 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 } } 

Básicamente, mi ObservableMutableLiveData es una copy de ObservableField usa LiveData para almacenar el model y con esta implementación, el layout se actualiza después de cada actualización del model.

Las preguntas son:

  • ¿Es esta una mala implementación de LiveData ? ¿Este envoltorio "rompe" las funcionalidades de LiveData , como ser consciente del ciclo de vida?
  • Según entiendo, LiveData es el nuevo campo de ObservableField . ¿Es esto correcto?