java - 自动数据绑定
问题描述
我在我制作的一个简单的购物应用程序中实现了数据绑定。每当我将一个项目添加到购物车时,其中的 aRelativeLayout
和两个TextView
s 都会更新它们的值(特别是颜色和背景)。如果我向您展示以下内容,您可能会更好地了解我在做什么:
<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 中?
解决方案
更新值时需要通知视图更新绑定。
您可以使您的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)
}
}
推荐阅读
- web - 如何在 Workbox PWA 中脱机
- excel - 如何编辑此 VBA 代码以接受不同的值?
- c - 我的 for 循环序列没有以边界结束
- ide - Chaincoder IDE 是否与 Ubuntu 18.04 兼容?
- python - 清理python字符串,多个不同的字符
- python - 不能用 BeautifulSoup 报废 Youtube
- regex - 使用正则表达式从两个不同的日志样本中提取源 IP 地址
- android - 没有互联网连接时向 FirebaseDatabase 添加数据
- android - 在 startActivityForResult 中传递额外数据在 onActivityResult 中从另一个类接收到 null
- android - 通知在 android api 28 上无法正常工作