Использование LiveData с привязкой данных

Со стабилизацией компонентов Android Architecture я начал обновлять все мои основные ViewModel s до новой реализации ViewModel . По моему LiveData , использование LiveData рекомендуется удерживать класс Model так как он лучше управляет жизненным циклом.

Мне нравится использовать Data Binding потому что он делает код более ясным в Java / Kotlin, и нет необходимости «смотреть» изменения значений для обновления пользовательского интерфейса. Однако макет с использованием Data Binding отслеживает только изменения данных, если Model (или ViewModel) расширяет BaseObservable и LiveData . Я понимаю, что одна из основных целей LiveData должна соблюдаться и обновлять пользовательский интерфейс программно, но для простых обновлений LiveData 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 , LiveData – это новый ObservableField . Это верно?

    Android Studio 3.1 (в настоящее время в Canary 6) устранит эту проблему, поскольку LiveData можно использовать в качестве observable field :

    Обновления привязки данных:

    Теперь вы можете использовать объект LiveData в качестве наблюдаемого поля в выражениях привязки данных. Класс ViewDataBinding теперь включает новый метод setLifecycle, который необходимо использовать для наблюдения за объектами LiveData.

    Источник: Android Studio 3.1 Canary 6 теперь доступен

    Intereting Posts
    findViewById ClassCastExcpetion Проверка метода Спящий режим Apache FOP 2.2 Включить шрифты, используя относительный путь Модуль библиотеки Android, разработанный в Kotlin, экспортируется в приложение Java, вызывающее неудачное разрешение: Lkotlin / jvm / internal / Intrinsics Kotlin генерирует конструктор, который устанавливает значения по умолчанию для нулевых аргументов Подготовьте несколько BuildTypes с теми же шагами в TeamCity Kotlin DSL Пользовательский Сериализатор Джексона делегирует Джексону сериализацию NullPointerException в Android Studio 3 Beta 1 Почему приложение не работает под Android 4.x в Котлине? Android: панель инструментов не отображается Весна 5 и Котлин 1.1 Корутинцы: Тип rx.Седулер отсутствует Kotlin – Расширение для финального класса Сеттер для поля удаляется по типу проекции Создание настраиваемой масштабируемой и масштабируемой ViewGroup, которая расширяет ConstraintLayout NullPointerException для android.support.v4.app.NotificationCompatBase $ Action.getIcon ()