Android Architecture Component Data Binding Library (一) 概要

版权声明:本文为博主原创文章,欢迎大家转载!

但是转载请标明出处: https://blog.csdn.net/t000818/article/details/84580412,本文出自:【唐宏宇的博客】 


Data Binding 库是可以让我们使用声明性格式而不是以编程方式将布局中的UI组件绑定到应用中。

布局在activities中的定义方式,通常是调用UI框架方法。例如,下面的代码调用findViewById()来查找TextView小部件并将其绑定到viewModel变量的userName属性。

findViewById<TextView>(R.id.sample_text).apply {
    text = viewModel.userName
}

Java写法:

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

以下示例显示如何使用Data Binding库直接在布局文件中为widget指定文本值。这样不需要显示调用任何Java代码。注意使用
赋值表达式中的{}语法:

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

布局文件中的绑定组件的方式,可以让我们在activities中不需要使用UI框架方法调用,使其更简单,更易于维护。这还可以提高应用程序的性能,并有助于防止内存泄漏和空指针异常。

 

集成Data Binding 库


开始吧
该链接将介绍如何在Android应用中使用数据绑定库。
了解如何让你的开发环境随时可以使用数据绑定库,包括支持Android Studio中的数据绑定代码。

 

布局和绑定表达式

表达式语言允许我们编写表达式将变量连接到布局中的View。Data Binding库会自动生成将布局中的View与数据对象绑定的类。
该库提供了可在布局中使用的import,variable和includes等功能。

Data Binding库的这些功能与现有的布局无缝共存。例如,可以在<data>标记内的表达式中使用的已绑定variable变量,该<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库允许可以观察对象,字段或集合。


生成的绑定类
Data Binding库生成用于访问布局中variable和View的绑定类。该链接会演示如何使用和自定义生成的绑定类。


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

Kotlin写法:

@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}

Java写法:

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

将布局视图绑定到架构组件
Android支持库中的架构组件,可以使用它来设计健壮,可测试和可维护的应用程序。可以将架构组件与数据绑定库一起使用,以进一步简化UI的开发。


双向数据绑定
数据绑定库支持双向数据绑定。这种绑定方式支持接收属性的数据变更并同时侦听对该属性的更新。

 

附加资源


请看Github上的Android Data Binding 例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值