Android Architecture Component DataBinding -- 使用可观察的数据对象(翻译)
Android Architecture Component DataBinding – 使用可观察的数据对象(翻译)
原文:https://developer.android.com/topic/libraries/data-binding/observability
可观察性是指对象将其数据的变化通知他人的能力。Data Binding 库允许你去创建对象,属性,可观察集合。
任何普通的对象都可以使用 Data Binding,但是修改修改之后不会自动引发 UI 的更新。Data Binding 可以使数据对象能够在其数据更改时通知其他对象,也就是监听器。有 3 种不同的可观察类的类型:objects
,fields
和 collections
。
当这些可观察的数据对象之一绑定到 UI,并且数据对象的属性发生改变时,UI 将自动更新。
Observable fields
创建实现了 Observable
接口的类会涉及到一些工作,如果你的类只有几个属性,这就不值得这么做。在这种情况下,你可以使用泛型 Observable
类和下面几种特定于原生的类来使得属性变得可观察:
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable
Observable fields 是仅包含了一个属性的可观察对象。原始数据类型版本是为了避免访问时的装箱和拆箱操作。要使用这个机制,创建一个在 Java 语言中的 public final
属性或者在 Kotlin 语言中的只读属性,如下所示:
1 | class User { |
要访问属性的值,使用 set()
和 get()
访问器方法,如下:
1 | user.firstName = "Google" |
Android Studio 3.1 或者更高的版本允许你使用 LiveData 替换 Obervable 对象,它可以给你的 app 带来额外的好处。更多详情见 当数据改变时使用 LiveData 通知 UI。
Observable collections
一些 app 使用动态结构来保存数据。Observable collections 允许你使用一个 key 来访问这些结构。ObservableArrayMap
类在 key 是引用类型时候(比如 String
)是很有用的,比如下面的例子:
1 | ObservableArrayMap<String, Any>().apply { |
在 layout 中,可以使用 string keys 来访问,如下:
1 | <data> |
ObservableArrayList
类在 key 是 integer 时很有用,如下:
1 | ObservableArrayList<Any>().apply { |
在 layout 中,list 可以通过 indexes 访问,如下:
1 | <data> |
Observable objects
一个实现了 Observable
接口的类允许监听器的注册来针对 observable 对象上属性被改变时希望收到通知。
Observable
接口有一个增加和移除监听器的机制,但是你必须决定什么时候发送通知。为了让开发更简单,Data Binding 库提供了 BaseObservable
类,它实现了监听器的注册机制。实现了 BaseObservable
的类负责属性变化时的通知。在 getter 方法上面增加 Bindable
注解,在 setter 方法上面调用 notifyPropertyChanged()
) 方法,如下:
1 | class User : BaseObservable() { |
Data Binding 在 module 包下面(包含了 resource ids)生成了一个名为 BR
的类用于数据绑定。Bindable
注解在编译时期在 BR
类中生成了一个 entry。如果数据类不能被修改,Observable
接口可以通过使用一个PropertyChangeRegistry
来有效地注册和通知监听器的方式被实现。
本文链接:https://blog.wangjiegulu.com/2018/04/15/android_architecture_components_observability/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处。