Автоматическое связывание данных - PullRequest
0 голосов
/ 18 декабря 2018

Я реализовал привязку данных в простом приложении для покупок, которое я сделал.Всякий раз, когда я добавляю товар в корзину, значения RelativeLayout и двух TextView внутри него обновляются (особенно цвет и фон).Вы можете получить лучшее представление о том, что я делаю, если я покажу вам это:

<RelativeLayout
        android:id="@+id/shopping_cart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@{shoppingCart.isActive ? @color/lightBlue : @color/grey }"
        android:padding="13dp"
        android:onClick="buy">
        <TextView
            android:id="@+id/cart_state"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{shoppingCart.state}"
            android:textSize="20sp"
            android:textStyle="bold"
            android:layout_marginStart="40dp"
            android:textColor="#fff"
            android:layout_centerHorizontal="true"
            />
        <TextView
            android:id="@+id/cart_total"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(shoppingCart.totalPrice)}"
            android:textSize="20sp"
            android:textColor="#fff"
            android:layout_marginStart="30dp"
            android:layout_toEndOf="@id/cart_state"
            android:gravity="end"
            />
    </RelativeLayout>

Это на самом деле работает довольно хорошо!

Но есть проблема:

Если я хочу увидеть изменения, я должен начать новое действие и вернуться к «исходному» действию (например, если бы мне пришлось обновить действие, чтобы увидеть, как привязка данных работает своим волшебством).

Тем не менее, я бы действительно предпочел, чтобы я мог видеть, что изменения происходят немедленно, без необходимости обновлять или повторно открывать действие.

То есть, как я могу сделать так, чтобы изменения, применяемые связыванием данных, мгновенно отражались в пользовательском интерфейсе?

1 Ответ

0 голосов
/ 18 декабря 2018

Вам необходимо уведомить представление об обновлении привязки при обновлении значения.

Вы можете сделать свой класс ShoppingCart, расширяющий BaseObservable для уведомляющей способности.

Взгляните например в документе ниже

class User : BaseObservable() {

@get:Bindable
var firstName: String = ""
    set(value) {
        field = value
        notifyPropertyChanged(BR.firstName)
    }

@get:Bindable
var lastName: String = ""
    set(value) {
        field = value
        notifyPropertyChanged(BR.lastName)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...