1). 简介
Data Binding Library是一个支持库,允许在布局文件中绑定数据源。最小支持API为14,gradle插件最小为1.5.0。
示例
2). 配置
- app/build.gradle
android {
...
dataBinding {
enabled = true
}
}
3). 布局绑定表达式
<?xml version="1.0" encoding="utf-8"?>
<!--使用DataBinding时最外层包裹的内容-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<!--数据节点-->
<data>
<!--变量-->
<variable
name="user"
type="com.mazaiting.jetpack.architecture.bean.User"/>
<variable
name="presenter"
type="com.mazaiting.jetpack.architecture.expression.ExpressionPresenter"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="@{user.firstName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{String.valueOf(user.index + 1)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{user.display ?? user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="监听"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{(view) -> presenter.show(view, user) }"
/>
<Button
android:text="引用"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{ presenter::onClickShow }"
/>
<Button
android:text="修改FirstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onChangeFirstName"
/>
</LinearLayout>
</layout>
4). Observable UI
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<!--<variable-->
<!--name="user"-->
<!--type="com.mazaiting.jetpack.architecture.bean.ObservableUser"/>-->
<variable
name="user"
type="com.mazaiting.jetpack.architecture.bean.BaseObservableUser"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="@{ user.firstName }"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="@{ user.lastName }"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="@{ String.valueOf(user.age)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="修改FirstName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onChangeFirstName"
/>
</LinearLayout>
</layout>