首页 > 解决方案 > 自动数据绑定

问题描述

我在我制作的一个简单的购物应用程序中实现了数据绑定。每当我将一个项目添加到购物车时,其中的 aRelativeLayout和两个TextViews 都会更新它们的值(特别是颜色和背景)。如果我向您展示以下内容,您可能会更好地了解我在做什么:

<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>

这实际上效果很好!

但是有一个问题:

如果我想看到更改发生,我必须启动一个新活动,然后返回到“原始”活动(就像我必须刷新活动以查看数据绑定的魔力一样)。

但是,如果我可以立即看到更改发生,而无需刷新或重新打开活动,我真的更喜欢。

即,如何使数据绑定应用的更改立即反映在 UI 中?

标签: javaandroiduser-interfacedata-binding

解决方案


更新值时需要通知视图更新绑定。

您可以使您的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)
    }
}

推荐阅读