文件配置
注意gradle的配置不能低于1.5.0
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.admin.myapplication"
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
//需要一起配置進(jìn)去
allprojects {
repositories {
jcenter()
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//databinding的配置
dataBinding{
enabled true
}
}
布局文件
布局文件的根節(jié)點(diǎn)不在是Viewgroup而是變成了layout,新增一個(gè)節(jié)點(diǎn)data
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" >
<data>
<variable
name="company"
type="com.example.admin.myapplication.Company" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{company.companyName}"/>
</LinearLayout>
</layout>
data節(jié)點(diǎn)也支持import屬性
<data>
<import type="com.example.admin.myapplication.Company" />
<variable name="company" type="Company" />
</data>
build.gradle 中添加的那個(gè)插件 - com.android.databinding會(huì)根據(jù) xml 文件的名稱 Generate 一個(gè)繼承自ViewDataBinding的類涂召。
生成規(guī)則
將我們布局文件的首字母大寫,并且去掉下劃線纲仍,將下劃線后面的字母大寫,加上Binding.
比如xml文件activity_main.xml ->ActivityMainBinding
雙向綁定Observable Binding
目前只支持單項(xiàng)綁定
- 繼承BaseObservable
- @Bindable
- notifyPropertyChanged(BR.companyName);
BR是編譯階段生成的一個(gè)類贸毕,功能與 R.java類似郑叠,用 @Bindable標(biāo)記過 getter方法會(huì)在 BR中生成一個(gè) entry。
還有更細(xì)粒度的綁定方式
public final ObservableField<String> companyName= new ObservableField<>();
數(shù)據(jù)對(duì)象
public class Company extends BaseObservable {
private String companyName;
@Bindable
public String getCompanyName() {
return companyName;
}
@Bindable
public void setCompanyName(String companyName) {
this.companyName = companyName;
notifyPropertyChanged(com.example.admin.myapplication.BR.companyName);
}
}
參考文章:https://github.com/LyndonChin/MasteringAndroidDataBinding
http://blog.csdn.net/qibin0506/article/details/47393725