Android数据绑定不适用于Kotlin的类授权

时间:2018-01-08 09:25:06

标签: kotlin android-databinding kotlin-delegate

我的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>()

但我对在ViewModel中使用ObservableFields感到不舒服。你有什么建议吗?

0 个答案:

没有答案