前言
之前有用过xutil的注解式绑定VIew,但还是觉得不够方便,因为在实际意义上还是做了View的绑定事件,而Databinding则完全不需要做这样的操作,只需要将xml稍稍改造下,并在build.gradle中加上几行代码就可以使用了
###怎么使用 DataBinding
使用方法很简单,Gradle 1.5 alpha 及以上自带支持 DataBinding,仅在app模块的build.gradle中加上几行代码就可以使用了:
android {
...
dataBinding {
enabled = true
}
...
}
Binding的命名规则
默认生成规则:xml通过文件名生成,使用下划线分割大小写。 比如activity_demo.xml,则会生成ActivityDemoBinding.java,item_search_hotel则会生成ItemSearchHotelBinding.java。
view的生成规则类似,只是由于是类变量,首字母不是大写,比如有一个TextView的id是first_name,则会生成名为firstName的TextView。 我们也可以自定义生成的class名字,只需要:
…
xml布局最外层添加Layout标签就行了
//原来的layout 代码
变量绑定
使用data标签,我们就可以在xml中申明变量,在其中使用该变量的field,并通过binding实例set进来。
如:
也可以这样
可以直接使用类名Employee在type,如果有两个类名完全一致的类可以设置alias=""属性设置别名:
然后我们就可以在java代码中使用
binding.setEmployee(employee);
// 或者直接通过setVariable
binding.setVariable(BR.employee, employee);
事件绑定
严格意义上来说,事件绑定也是一种变量绑定。我们可以在xml中直接绑定
android:onClick android:onLongClick android:onTextChanged …
方法引用
通常会在java代码中定义一个名为Handler或者Presenter的类,然后set进来,方法签名需和对应listener方法一致。
java代码
@Override
protected void onCreate(Bundle savedInstanceState) {
...
binding.setPresenter(new Presenter());
...
}
public class Presenter {
public void onTextChanged(CharSequence s, int start, int before, int count) {
employee.setFirstName(s.toString());
employee.setFired(!employee.isFired.get());
}
public void onClick(View view) {
Toast.makeText(DemoActivity.this, "点到了", Toast.LENGTH_SHORT).show();
}
}