Android Jetpack 之 DataBinding
参考文章:
官方文档
“终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 重新认知!
一、简介
DataBinding数据绑定库能够省去findViewById() 步骤,大量减少 Activity 内的代码;数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。
缺点:
- 如果在xml中写逻辑表达式,xml 就承担了 Presenter/ViewModel 的功能 ,职责变得混乱。
- 在xml中写表达式逻辑,出错了debug不了。
- 如果界面布局复杂,容易出错,不好定位问题。
二、接入
第一步:要将应用配置为使用数据绑定,请在应用模块的 build.gradle 文件中添加 dataBinding 元素,如以下示例所示:
android {
...
dataBinding {
enabled = true
}
}
三、使用
步骤一
修改原来的XML布局文件,在原布局外层包裹一层layout标签,并且使用data和variable标签,添加需要绑定的数据,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data calss="MainBinding">
<variable name="user" type="com.example.User"/>
</data>
<!-- 原布局开始-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName, default=default_value}"/>
</LinearLayout>
<!-- 原布局结束-->
</layout>
步骤二
设置布局页面以及绑定数据到页面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);
}