databinding

一、实体类bean继承BaseObservable,获得了通知UI的能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private class User extends BaseObservable {
private String firstName;
private String lastName;
@Bindable
public String getFirstName() {
return this.firstName;
}
@Bindable
public String getFirstName() {
return this.lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}

Bindable标签在编译时会自动生成BR类,当Model中数据发生改变的时候,通过Set方法调用notifyPropertyChanged的,通知对象的某个字段数据已经更新。

在UI里,通过实体化的对象添加BaseObservable的addOnPropertyChangedCallBack方法:
Adds a callback to listen for changes to the Observable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
user.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(final Observable observable, final int i) {
//TODO
runOnUiThread(new Runnable() {
@Override
public void run() {
switch (i) {
case BR.firstName:
break;
case BR.lastName:
break;
default:
break;
}
}
});
}
});