android databinding目前暂不支持双向绑定 但是提供了 Observable Binding 来得到类似的效果
(1)继承 BaseObservable
public class ObservableUser extends BaseObservable{
private String firstName;
private String lastName;
@Bindable
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
@Bindable
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}
BR是变异阶段生成的一个类 类似R.java 当你使用了 @Bindable去标记getter方法, BR中就会生成对应属性的一个entry,你就可以 BR.属性
在setter方法中使用 notifyPropertyChanged方法可以通知系统BR.属性 已经变化需要更新UI
(2)第二种双向绑定的实现方式
public class PlainUser {
public final ObservableField<String> firstName = new ObservableField<>();
public final ObservableField<String> lastName = new ObservableField<>();
public final ObservableInt age = new ObservableInt();
}
更新数据
plainUser.firstName.set(++index +"");
(3) 神奇的 带ID的View 如果你在布局中对View设定了ID 那么你只需要在代码中 在binding对象中直接调用 同ID名的对象直接使用
binding.btnSet.setOnClickListener(new View.OnClickListener() {