使用:
1、Gradle文件中添加 android {
…
dataBinding {
enabled =true
}
}
2、将普通的布局变成databinding布局 :alt+回车键
Binding生成规则:
默认生成规则:xml通过文件名生成,使用下划线分割大小写。
比如activity_demo.xml,则会生成ActivityDemoBinding,item_search_hotel则会生成ItemSearchHotelBinding。
view的生成规则类似,只是由于是类变量,首字母不是大写,比如有一个TextView的id是first_name,则会生成名为firstName的TextView。
们也可以自定义生成的class名字,只需要:<data class=“ContactItem”>…</data> 这样生成的类就会变成ContactItem。
基本使用
生成Binding实例
所有Binding实例的生成都可以通过DataBindingUtil进行,方法名与该view的原inflate方法一致,如activity仍然为setContentView,只是增加了参数因为需要获得activity。
去除findViewById
使用了Data Binding后,我们再也不需要findViewById,因为一切有id的view,都已经在Binding类中被初始化完成了,只需要直接通过binding实例访问即可。
变量绑定
使用data标签,我们就可以在xml中申明变量,在其中使用该变量的field,并通过binding实例set进来。
binding.setEmployee(employee);// 或者直接通过setVariable
binding.setVariable(BR.employee, employee);
事件绑定
严格意义上来说,事件绑定也是一种变量绑定。我们可以在xml中直接绑定
android:onClick
android:onLongClick
android:onTextChanged
方法引用
通常会在java代码中定义一个名为Handler或者Presenter的类,然后set进来,方法签名需和对应listener方法一致。
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入 First Name"
android:onTextChanged="@{presenter::onTextChanged}"/>
public class Presenter {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
}
监听器绑定(lambda)
presenter.onClickListenerBinding(employee)}"> presenter.onClickListenerBinding(employee)}"> presenter.onClickListenerBinding(employee)}"> presenter.onClickListenerBinding(employee)}">android:onClick="@{() -> presenter.onClickListenerBinding(employee)}"