【问题标题】:Automatic data binding自动数据绑定
【发布时间】:2019-05-18 08:46:24
【问题描述】:

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

【问题讨论】:

    标签: java android user-interface data-binding


    【解决方案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)
        }
    }
    

    【讨论】:

    • 就是这样,我以前从未真正使用过 Observables。我查看了文档,但由于某种原因,我完全跳过了该部分。非常感谢!
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多