内容简介:可观察性指的是一个对象通知其它对象它数据发生变化的能力。数据绑定库能让你使对象(objects),域(fields)、以及集合(collections)变得可观察。任何普通的对象都能用于数据绑定,但是修改对象并不会自动导致UI的更新。数据绑定可以被用来给予你的数据对象通知其他对象的能力,例如,当它的数据发生改变时的监听器。有三种不同类型的可观察类:
可观察性指的是一个对象通知其它对象它数据发生变化的能力。数据绑定库能让你使对象(objects),域(fields)、以及集合(collections)变得可观察。
任何普通的对象都能用于数据绑定,但是修改对象并不会自动导致UI的更新。数据绑定可以被用来给予你的数据对象通知其他对象的能力,例如,当它的数据发生改变时的监听器。有三种不同类型的可观察类: objects
, fields
以及 collections
。
当这些可观察数据对象绑定到界面,数据对象的一个属性发生变化,界面就会自动更新。
可观察的域(fields)
在创建实现 Observable
接口的类的时候是有一定工作量的,如果你的类中只有少量几个属性是得不偿失的。在这种情形下,你可以使用通用的可观察类以及以下的基础类来是域变得可观察:
ObservableBoolean ObservableByte ObservableChar ObservableShort ObservableInt ObservableLong ObservableFloat ObservableDouble ObservableParcelable
可观察域是有单个域的自给自足的可观察对象。基础版本避免了访问操作的装箱和拆箱。为了使用这个机制,创建一个公开的final属性,如下例子所示:
class User {
val firstName = ObservableField<String>()
val lastName = ObservableField<String>()
val age = ObservableInt()
}
为了访问域的值,使用set()和get()的存取方法,如下所示:
user.firstName = "Google" val age = user.age
注意:在Android Studio 3.1以及更高版本上,你可以使用LiveData对象替代Observable域,它能够为你的应用带来额外的好处。想要知道跟多的信息,查看使用LiveDtat通知UI数据发生了变化。
可观察的集合
一些应用使用动态结构来持有数据。可观察的集合允许通过key来访问这些结构。 ObservableArrayMap
类在key是一个引用类型的十分有用的,例如 String
,如以下的例子所示:
ObservableArrayMap<String, Any>().apply {
put("firstName", "Google")
put("lastName", "Inc.")
put("age", 17)
}
在布局中,map可用用字符串key找到,如下:
<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"/>
当key是整形的时候, ObservableArrayList
是很有用的,如下:
ObservableArrayList<Any>().apply {
add("Google")
add("Inc.")
add(17)
}
在布局中,列表能够通过索引访问,如下例所示:
<data>
<import type="android.databinding.ObservableList"/>
<import type="com.example.my.app.Fields"/>
<variable name="user" type="ObservableList<Object>"/>
</data>
…
<TextView
android:text='@{user[Fields.LAST_NAME]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
可观察的对象
实现 Observable
接口的类,允许注册当可观察对象的属性发生变化的监听器。为了使开发变得简单,DataBinding 库提供了 BaseObservable 类,它实现了监听注册机制。这个实现BaseObservable 的数据类是负责在属性改变的时候进行通知的。这是通过赋值一个Bindable 对象到 getter 以及在 setter 对象中调用 notifyProperytyChanged(),如下例所示:
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)
}
}
在模块包中,Data binding 生成了一个名叫 BR 的类,这个类包含了用做数据绑定的资源id。 Bindable
注解在编译时在BR类文件中生成了一个入口。如果用于数据的基础类不能发生改变, Observable
接口可以通过使用一个 PropertyChangeRegistry
对象来有效地注册和通知监听器的方式实现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出Ext JS
何启伟、徐会生、康爱媛 / 人民邮电出版社 / 2010-5 / 69.00元
以用户为中心的时代,应用的界面外观变得越来越重要。然而,很多程序员都缺乏美术功底,要开发出界面美观的应用实属不易。Ext JS的出现,为广大程序员解决了这一难题。它有丰富多彩的界面和强大的功能,是开发具有炫丽外观的RIA应用的最佳选择。 本书是《深入浅出Ext JS》的升级版,涵盖了最新发布的Ext JS 3.2新特性,并对上一版的内容进行增补,充实了示例代码,同时补充了两个功能强大的实例。......一起来看看 《深入浅出Ext JS》 这本书的介绍吧!