Kotlin: неразрешенная ссылка на обновление пользовательского интерфейса с использованием Observables - PullRequest
0 голосов
/ 24 июня 2019

Я изучаю kotlin и привязку данных для Android.Я могу запустить функцию привязки данных.Пока я работаю с Observable, я получаю неразрешенную ссылку для BR.property

, вот мой model class:

data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {


var imageUrl: String? = fruitImage
    get() = field
    set(value) {
        field = value
        notifyPropertyChanged(BR.imageUrl)
    }

var nameValue: String? = fruitName
    get() = field
    set(value) {
        field = value
        notifyPropertyChanged(BR.fruitModel)
    }

}

Я могу получитьBR.fruitModel вместо двух выше.Вот мой xml:

<data>

    <variable name="onClickItem"
              type="com.wings.kotlintest1.interfaces.FruitAdapterInterface"/>

    <variable name="fruitModel"
              type="com.wings.kotlintest1.model.FruitModel"/>

    <variable name="position"
              type="int"/>

</data>

<LinearLayout android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical">

    <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            card_view:cardCornerRadius="5dp"
            android:onClick="@{() -> onClickItem.onClickItemListener(position)}">

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

            <ImageView
                    android:id="@+id/ivFruitImage"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    app:loadImageWithGlide="@{fruitModel.fruitImage}"/>

            <TextView
                    android:id="@+id/tvFruitName"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginStart="10dp"
                    android:gravity="center_vertical"
                    android:textColor="@color/colorAccent"
                    android:textSize="18sp"
                    android:text="@{fruitModel.fruitName}"/>


        </LinearLayout>


    </androidx.cardview.widget.CardView>


</LinearLayout>

В чем причина того, что класс BR не генерирует свойства?Я что-то не так делаю?

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Я думаю, вам нужно добавить свойство @Bindable в get () этих полей. Увидеть https://developer.android.com/topic/libraries/data-binding/observability

1 голос
/ 24 июня 2019

Я думаю, вам нужно использовать @get:Bindable

data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {

    @get:Bindable
    var imageUrl: String? = fruitImage
        get() = field
        set(value) {
            field = value
            notifyPropertyChanged(BR.imageUrl) // **unresolved reference : BR.imageUrl**
        }

    @get:Bindable
    var nameValue: String? = fruitName
        get() = field
        set(value) {
            field = value
            notifyPropertyChanged(BR.nameValue) // **unresolved reference : BR.nameValue**
        }
}
0 голосов
/ 24 июня 2019

Ваш полный макет должен быть внутри <layout> ... </layout>.Также попробуйте очистить и построить свой проект.Вы также можете отследить вашу неправильную строку в стеке трассировки под окном сборки.

...