自动数据绑定

时间:2018-12-17 23:33:06

标签: java android user-interface data-binding

我在自己制作的一个简单的购物应用程序中实现了数据绑定。每当我将商品添加到购物车时,其中的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>

这实际上效果很好!

但是有一个问题:

如果我想查看发生的更改,那么我必须开始一个新活动,然后返回到“原始”活动(例如,如果必须刷新该活动以查看数据绑定的神奇作用)。

但是,如果我能立即看到更改而不必刷新或重新打开活动,我真的很希望。

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

1 个答案:

答案 0 :(得分:1)

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

您可以使您的ShoppingCart类扩展BaseObservable以获得通知功能。

看看下面document中的示例

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