一.Databinding使用介绍
1.使用环境
在Android Studio上使用,需要在module级别的build.gradle上添加对DataBinding的支持:
dataBinding{ enabled = true }
2.单向绑定 (数据变化引起界面变化 界面变化无法引起数据变化)
继承BaseObserveable使用
Observable是提供添加移除监听的一个java接口,DataBinding基于此接口提供了一个基础类BaseObserable,我们可以这样使用它,通过Bindale注解绑定一个getter,当data属性发生改变在setter中发出通知,这样就实现了响应。
@Bindable 注解 放在绑定的类属性前
notifyPropertyChanged(BR.fans); 更新方法
例
public class Star extends BaseObservable { //名字 private String name; //粉丝数 @Bindable private int fans; public Star(String name, int fans) { this.name = name; this.fans = fans; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getFans() { return fans; } public void setFans(int fans) { this.fans = fans; notifyPropertyChanged(BR.fans); } }
通过ObseravbleField使用
google为我们提供了一些Obserable类: ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, and ObservableParcelable。
用ObservableField<>即可
例
public class Star2 { ObservableField<String> name; ObservableField<Integer> fans; public ObservableField<String> getName() { return name; } public void setName(ObservableField<String> name) { this.name = name; } public ObservableField<Integer> getFans() { return fans; } public void setFans(ObservableField<Integer> fans) { this.fans = fans; } public Star2(ObservableField<String> name, ObservableField<Integer> fans) { this.name = name; this.fans = fans; } }
使用ObservableCollection
通过使用这个我们可以不再去重新创建一个类
ObservableArrayMap
star3 = new ObservableArrayMap<>(); star3.put("name" , "ljj"); star3.put("fans" ,1000); mainBinding.setStar3(star3);
使用方法
public void addFan3(){ int number = Integer.valueOf(String.valueOf(star3.get("fans"))) + 1000; star3.put("fans" ,number); }
3.双向绑定 通常与ViewModel相结合
使用方法 @={star4.mutableLiveData.name}加上=号即为双向绑定
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="20sp" android:text='@={star4.mutableLiveData.name}'/>