【Android】Jetpack的Data Binding库

本文介绍了Android的Data Binding库,它通过声明式绑定让UI组件与数据源连接,简化Activity代码,避免内存泄漏和空指针异常。内容包括Data Binding的配置、表达式语言、生成的绑定类以及如何利用可观察数据对象实现自动UI更新。
摘要由CSDN通过智能技术生成

Data Binding库支持使用声明性格式而不是以编程方式将layout中的UI组件绑定到应用程序中的数据源。

我们通常在Activity中声明layout,并通过UI框架方法获取到UI控件。例如,下面代码演示调用findViewById()去获取TextView控件,然后将它绑定到viewModel的userName。

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

接下来的例子演示使用Data Binding库直接在layout文件中为TextView指定需要显示的文本。这样就不需要调用上面例子的Java代码。请注意在赋值表达式中使用@{}语法:

<TextView
    android:text="@{viewmodel.userName}" 
    />

通过在layout文件中绑定控件可以让你在Activity中移除很多UI框架方法的调用,使它们更简单,更容易维护。这样还可以提高你的应用程序的性能,并有助于防止内存泄漏和空指针异常。

使用Data Binding库
下面介绍如何在Android程序中使用Data Binding库。

开始
了解如何配置开发环境以支持使用Data Binding库,包括支持Android Studio中的Data Binding代码。

Layouts和Binding表达式
表达式语言允许你在layout文件中编写表达式连接变量和视图。Data Binding库自动生成将layout中的视图与数据对象绑定所需的类。该库提供了可在layout中使用的导入,变量和包含等功能。

库的这些特性可以与现有布局完美共存。例如,可以在表达式中使用的绑定变量是在数据元素内部定义的,该data元素是UI布局的根元素的兄弟。这两个元素都包含在layout标记中,如以下示例所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>

使用可观察的数据对象
Data Binding库提供类和方法,可以很容易地观察数据以进行更改。当基础数据源发生改变时,你不需要担心刷新UI。你可以让你的变量或者它们的属性可观察。该库允许您使对象,字段或集合可观察。

生成绑定类
Data Binding库生成用于访问布局的变量和视图的绑定类。此页面显示如何使用和自定义生成的绑定类。

绑定的适配器
对于每个布局表达式,有一个绑定的适配器,它使得设置相应属性或监听器给所需的框架调用。例如,绑定的适配器可以负责调用setText()方法来设置text属性或调用setOnClickListener()方法来为click事件添加一个监听器。最常见的绑定适配器,例如本页示例中使用的android:text属性的适配器,可以在android.databinding.adapters包中使用。有关常用绑定适配器的列表,请参阅适配器。您还可以创建自定义适配器,如以下示例所示:

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值