3

我的视图模型:

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。你有什么建议吗?

4

0 回答 0