美文网首页
Android 官方架构组件-数据绑定Observable

Android 官方架构组件-数据绑定Observable

作者: R7_Perfect | 来源:发表于2019-10-28 19:41 被阅读0次

    数据绑定可用于数据对象在数据发生更改时通知其他对象(称为侦听器)。 有三种不同类型的可观察类:对象,字段和集合。

    当这些可观察数据对象之一绑定到UI且数据对象的属性更改时,UI将自动更新。

    使用通用的Observable类和以下特定于原始的类来使字段可观察:

    基本使用

    使用时候需要创建一个public final属性,或者使用Kotlin创建一个只读属性,如以下示例所示:

    class User {
        val firstName = ObservableField<String>()
        val lastName = ObservableField<String>()
        val age = ObservableInt()
    }
    

    要访问该字段值,用set()和get()方法,如下所示:

    user.firstName = "Google"
    val age = user.age
    

    数组使用

    ObservableArrayMap的使用:

    ObservableArrayMap<String, Any>().apply {
        put("firstName", "Google")
        put("lastName", "Inc.")
        put("age", 17)
    }
    
    <data>
        <import type="android.databinding.ObservableMap"/>
        <variable name="user" type="ObservableMap<String, Object>"/>
    </data>
    …
    <TextView
        android:text="@{user.lastName}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView
        android:text="@{String.valueOf(1 + (Integer)user.age)}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

    ObservableArrayList的使用

    ObservableArrayList<Any>().apply {
        add("Google")
        add("Inc.")
        add(17)
    }
    

    对象使用

    为了简化开发,databinding库提供了BaseObservable类,该类实现了侦听器注册机制。 实现BaseObservable的数据类负责通知属性何时更改。 这是通过为getter分配Bindable批注并在setter中调用notifyPropertyChanged()方法来完成的,如以下示例所示:

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

    databinding在模块包中生成一个名为BR的类,其中包含用于数据绑定的资源的ID。 Bindable注释在编译期间会在BR类文件中生成一个条目。 如果不能更改数据类的基类,则可以使用PropertyChangeRegistry对象来实现Observable接口,以高效地注册和通知侦听器。

    相关文章

      网友评论

          本文标题:Android 官方架构组件-数据绑定Observable

          本文链接:https://www.haomeiwen.com/subject/pcjbvctx.html