文件配置
注意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
}
//需要一起配置进去
allprojects {
repositories {
jcenter()
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//databinding的配置
dataBinding{
enabled true
}
}
布局文件
布局文件的根节点不在是Viewgroup而是变成了layout,新增一个节点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节点也支持import属性
<data>
<import type="com.example.admin.myapplication.Company" />
<variable name="company" type="Company" />
</data>
build.gradle 中添加的那个插件 - com.android.databinding会根据 xml 文件的名称 Generate 一个继承自ViewDataBinding的类。
生成规则
将我们布局文件的首字母大写,并且去掉下划线,将下划线后面的字母大写,加上Binding.
比如xml文件activity_main.xml ->ActivityMainBinding
双向绑定Observable Binding
目前只支持单项绑定
- 继承BaseObservable
- @Bindable
- notifyPropertyChanged(BR.companyName);
BR是编译阶段生成的一个类,功能与 R.java类似,用 @Bindable标记过 getter方法会在 BR中生成一个 entry。
还有更细粒度的绑定方式
public final ObservableField<String> companyName= new ObservableField<>();
数据对象
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
网友评论