Привязка данных Android не работает с делегацией классов Kotlin

Моя ViewModel:

class MyVM(
        app: Application,
        private val observableImpl: BaseObservable,
        /* other colaborators*/
) : AndroidViewModel(app), Observable by observableImpl {

    var currencyCode: String by Delegates.observable("") { _, _, newValue ->

        /* business logic methods */

        notifyPropertyChanged(BR.currencyCode)
    }
        @Bindable get

}

Мой макет:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="vm"
            type="path.to.MyVM" />

    </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{vm.currencyCode}"
            app:layout_constraintEnd_toEndOf="parent" />

    </android.support.constraint.ConstraintLayout>
</layout>

когда currencyCode обновляется в модели данных, TextView не меняет текст автоматически.

Я пытался избавиться от наследования от AndroidViewModel и определил MyVM следующее:

class MyVM(/* other colaborators*/) : BaseObservable() {
}

И это сработало. Проблема в том, что я не могу выбросить наследство от AndroidViewModel в моем производственном коде.

Хотя есть обходной путь:

val currencyCode = ObservableField<String>()

Но мне неудобно использовать ObservableFields в моей ViewModel. У вас есть какие-нибудь предложения?

0 ответов

Другие вопросы по тегам