欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[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