一、基础配置
首先在build.gradle下配置databingding
1 android { 2 ........ 3 dataBinding { 4 enabled = true 5 } 6 }
二、Xml文件配置
将根布局改为layout,然后是data标签,用于声明变量,variable标签代表一个变量,name是变量名,type是变量类型。Import标签是声明类型,alias是起别名,当两个类名相同,可以设置不同的alias名区分。
接着和data平级的则是以前传统的布局,在布局中通过“@{}”进行单向绑定,“@={}”则是进行双向绑定,进行双向绑定时,javabean需要继承BaseObservable观察类,详细后续写。
1 <layout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools"> 3 <data> 4 <!--可以全局直接导入--> 5 <import 6 alias="UserSB" 7 type="com.lieyun.test.databinding.UserBean" /> 8 <variable 9 name="question" 10 type="com.example.questionanswer.pojo.Question" /> 11 </data> 12 <LinearLayout> 13 ...... 14 <TextView 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content" 17 android:gravity="center" 18 android:text="@={question.question_text}" 19 android:textSize="20sp"/> 20 </LinearLayout> 21 </layout>
三、Activity配置
将传统的setContentView方法改为databing的写法,ActivityMainBinding是根据xml文件名自动生成的,如下面的,xml文件名为activity_main,databingding会用驼峰命名法,加上Bingding后生成对应的ActivityMainBingding类。然后bingding的setQuestion方法是根据xml中的变量名自动生成的。
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 ActivityMainBinding bingding = DataBindingUtil.setContentView(this,R.layout.activity_main); 4 bingding.setQuestion(question); 5 }
四、双向绑定,动态更新
在javabean中,首先要让类继承BaseObservable类,然后对于get方法,在前面加上”@Bindable”标签;对于set方法,在结尾加上notifyPropertyChanged(BR.question_text);其中question_text是变量名,选择相应的变量名即可。
1 public class Question extends BaseObservable { 2 3 private String question_text; 4 5 @Bindable 6 public String getQuestion_text() { 7 return question_text; 8 } 9 10 public void setQuestion_text(String question_text) { 11 this.question_text = question_text; 12 notifyPropertyChanged(BR.question_text); 13 } 14 }