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