android -------- Data Binding的使用(三)Observable

解决:databinding 中 ViewModel数据发生改变,View中也要改变(实时更新)

 

BaseObservable

在ViewModel 中可以继承 BaseObservable

public class User extends BaseObservable {

    public User(String frstName,String lastName){
        this.frstName = frstName;
        this.lastName = lastName;
        observableArrayMap.put("zq","zhhhhh");
        list.add("aaa");
        list.add("bbb");
    }

    private String frstName;

    private String lastName;

    public ObservableArrayMap observableArrayMap = new ObservableArrayMap<>();

    public ObservableArrayList list = new ObservableArrayList<>();

    @Bindable
    public String getFrstName() {
        return frstName;
    }


    public void setFrstName(String frstName) {
        this.frstName = frstName;
        //刷新UI
        notifyPropertyChanged(com.zhangqie.databinding.BR.frstName);
    }

    @Bindable
    public String getLastName() {
        return lastName;
    }


    public void setLastName(String lastName) {
        this.lastName = lastName;
        //全部刷新
        //notifyChange();
    }
}

在 set 方法里面,使用 notifyPropertyChanged 来通知 UI 刷新,notifyPropertyChanged 只会刷新具体的值,notifyChange 方法则会刷新所有的值。
BR 的域则是通过在 get 方法上加 @Bindable 生成的。

 

ObservableArrayMap

与Java的Map使用相同

public ObservableArrayMap observableArrayMap = new ObservableArrayMap<>();

observableArrayMap.put("zq","zhhhhh");

布局中:




    

        

    

    

        

    

ObservableArrayList

与Java的List使用相同

 public ObservableArrayList list = new ObservableArrayList<>();
 list.add("aaa");
 list.add("bbb");

布局中:

        


        

Observable Fields

继承自 BaseObservable 的方法有点复杂,DataBinding 还提供了一种简单的写法—-ObservableField来实现数据实时刷新

public class UserObservableBean {
    public ObservableInt userId = new ObservableInt();
    public ObservableField userName = new ObservableField<>();
    public ObservableDouble userAge = new ObservableDouble();
    public ObservableFloat userSex = new ObservableFloat();
}

直接把属性定义成 ObservableField 类型的,并且修饰符需要是 public final 的。
除了 ObservableField,还可以使用 ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, ObservableParcelable。
访问值得时候,可以使用 get set 方法。

UserObservableBean userBean = new UserObservableBean();
userBean.userId.set(8);
userBean.userName.set("切切心语");
userBean.userAge.set(25);

userBean.userId.get();
userBean.userName.get();
userBean.userAge.get();

这种方式就方便多了;

你可能感兴趣的:(Android)