DataBinding(五)自动更新

虽然使用普通的Java对象就可以把数据绑定到UI界面,但是当数据变动时,UI却不会及时更新,所以DataBinding提供了observable objects、observable fields、observable collections来达到自动更新的效果。

observable objects

如果一个类实现了android.databinding.Observable接口,则DataBinding会绑定一个监听器来监听这个类的属性变化,DataBinding为了方便我们使用,提供了一个实现类BaseObservable。BaseObservable接口帮我们进行了监听器的绑定和移除,我们只要自己进行更新就可以了。对于getter使用@Bindable注解来生成BR.propertName字段,然后setter中调用notifyPropertyChanged(BR.propertName)语句来通知更新。

private static class User extends BaseObservable {
   private String firstName;
   private String lastName;
   @Bindable
   public String getFirstName() {
       return this.firstName;
   }
   @Bindable
   public String getLastName() {
       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);
   }
}

observable fields

对于自定义类可以通过以上方式进行设置,同时DataBinding也提供了另一种比较简便的方式,可以对单一字段进行包装,自动更新该字段:

private static class User {
   public final ObservableField firstName = new ObservableField<>();
   public final ObservableField lastName = new ObservableField<>();
   public final ObservableInt age = new ObservableInt();
}

其他可以使用的包装类包括:ObservableBoolean、ObservableByte、ObservableChar、ObservableShort、ObservableLong、ObservableFloat、ObservableDouble、ObservableParcelable。

赋值及取值使用set和get方法:

user.firstName.set("Google");
int age = user.age.get();

ObservableField还有另一种用法,即通过传递属性,传递的属性是ObservableField,然后被include的文件中使用String接收。
例如:


    
       
     
     



    
        
    

    
        
    

observable collections

当使用了集合数据时,如果key是引用类型,可以使用ObservableArrayMap包装类:

ObservableArrayMap user = new ObservableArrayMap<>();
user.put("firstName", "Google");
user.put("lastName", "Inc.");
user.put("age", 17);



    
    


如果key是int类型,则可以使用ObservableArrayList包装类:

ObservableArrayList user = new ObservableArrayList<>();
user.add("Google");
user.add("Inc.");
user.add(17);



    
    
    


 

                            
                        
                    
                    
                    

你可能感兴趣的:(DataBinding(五)自动更新)