[Android Jetpack架构]数据绑定
程序员文章站
2022-03-27 10:33:20
androidx.databinding 数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。传统修改布局元素属性调用以下代码:TextView textView = findViewById(R.id.sample_text);textView.setText(viewModel.getUserName());在布局文件中使用数据绑定库将文本直接分配到微件。这样就无需调用上述任何 Java 代码:
androidx.databinding 数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
传统修改布局元素属性调用以下代码:
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
在布局文件中使用数据绑定库将文本直接分配到微件。这样就无需调用上述任何 Java 代码:
<TextView
android:text="@{viewmodel.userName}" />
使用数据绑定的好处
借助布局文件中的绑定组件,您可以移除 Activity 中的许多界面框架调用,使其维护起来更简单、方便。还可以提高应用性能,并且有助于防止内存泄漏以及避免发生 Null 指针异常。
快速开始
1.修改build.gradle
在应用模块级别下的build.gradle
配置文件中添加以下配置:
android {
......
dataBinding {
enabled = true
}
}
2.修改布局文件
在布局文件中添加<layout>
元素作为根元素,然后在<layout>
元素中添加<data>
元素指示绑定的数据名称与类型。
修改前
<?xml version="1.0" encoding="utf-8"?>
<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}"/>
</LinearLayout>
修改后
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<!-- name指定属性名称,type指定属性类型 -->
<variable name="user" type="com.example.User"/>
<!-- 上面可以替换为以下代码
<import type="com.example.User"/>
<variable name="user" type="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}"/>
</LinearLayout>
</layout>
3.修改Activity代码
import androidx.databinding.DataBindingUtil;
import com.example.User;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
/* ActivityMainBinding对象是由布局文件名称activity_main.xml自动生成出来的 */
ActivityMainBinding binder = DataBindingUtil.setContentView(this, R.layout.activity_main);
binder.setUser(new User("firstName", "lastName"));
}
本文地址:https://blog.csdn.net/qimi923511491/article/details/107877898