Data Binding Library

Data Binding Library是一个支持库,允许您使用声明格式(而不是编程)将布局中的UI组件与应用程序中的数据源绑定。

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

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

下面的示例展示了如何使用Data Binding Library将文本直接分配到布局文件中的小部件上。这样就不需要调用上面显示的Java代码。注意在赋值表达式中使用@{}语法:

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

在布局文件中绑定组件使您可以在activity中移除许多UI框架调用,使它们更简单、更易于维护。这还可以提高应用程序的性能,并有助于防止内存泄漏和空指针异常。

使用以下页面了解如何在Android应用程序中使用数据绑定库。要浏览代码示例,请参见Android Data Binding Library samples

开始

了解如何使开发环境准备好使用数据绑定库,包括支持Android Studio中的数据绑定代码。

布局和绑定表达式

表达式语言允许您通过编写表达式连接变量和布局中的视图。Data Binding Library自动生成用于将布局中的视图与数据对象绑定的类。该库提供了一些特性,如导入、变量和包含,您可以在布局中使用它们。

库的这些特性与现有的布局无缝地共存。例如,在表达式中使用的绑定变量可以定义在UI布局的根元素的同级数据元素中。两个元素都封装在布局标记中,如下面的示例所示:

<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 Library提供了类和方法来方便地观察数据的变化。当底层数据源发生更改时,不必担心刷新UI。你可以让你的变量或它们的性质可见。库允许您将对象、字段或集合设置为可观察的。

生成绑定类

Data Binding Library生成绑定类,用于访问布局的变量和视图。这个页面向您展示了如何使用和定制生成的绑定类。

绑定适配器

对于每个布局表达式,都有一个绑定适配器,用于对框架调用设置相应属性或侦听器。例如,绑定适配器可以处理调用setText()方法来设置文本属性,或者调用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;
}

将布局视图绑定到架构组件

Android支持库包含体系结构组件,您可以使用这些组件设计健壮、可测试和可维护的应用程序。您可以使用带有数据绑定库的体系结构组件来进一步简化UI的开发。

Android Data Binding Library的更多相关文章

  1. (Android MVVM)使用Data Binding Library(1)

    Data Binding Library 用官方提供的Data Binding Library,可以最大限度的减少findViewById(),setOnClickListener()之类的胶水代码, ...

  2. 告别findViewById(),ButterKnife,使用Google Data Binding Library(1)

    Data Binding Library 用数据绑定编写声名性布局,可以最大限度的减少findViewById(),setOnClickListener()之类的代码.并且比起findViewById ...

  3. Android Data Binding实战(一)

    在今年Google I/O大会上,Google推出Design Library库的同时也推出了Android Data Binding,那么什么是Data Binding?其名曰数据绑定,使用它我们可 ...

  4. android -------- Data Binding的使用(一)

    Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用 面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助 描述: Data ...

  5. Android Data Binding代码实践(告别findViewById)(四)

    Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...

  6. Android Data Binding

    Android官方数据绑定框架DataBinding, 1.什么是DataBinding 2.DataBinding基础用法 3.DataBinding原理 4.表达式 5.null检查 6.incl ...

  7. Android Data Binding(数据绑定)用户指南

    Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...

  8. android data binding jetpack VIII BindingConversion

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  9. android data binding jetpack VII @BindingAdapter

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

随机推荐

  1. java网络编程Socket通信详解

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  2. 多线程练习,深刻体会了一次变量的BUG.

    package ltb20180106; public class TestBankThread { private int deposit=0;//注意全局变量的摆放. public TestBan ...

  3. vi命令【方向键】变字母键的解决方法

    vi命令[方向键]变字母键的解决方法   最近在SSH下玩Debian发现了一个有趣的现象,就是在一些个别版本的Debian镜像下,使用vi命令时会出现键盘输出出错的现象,使用方向键时会变成C,D等字 ...

  4. C/C++基础--面向对象编程OOP

    基类通常定义一个虚析构函数,通过基类指针析构派生类对象时不会出现未定义的行为. 如果一个类定义析构函数,编译器不会为这个类合成移动操作. 虚函数覆盖,可以显式地加override,可以让程序员的意图更 ...

  5. Scala类与对象

    类简介 简介 类是对象的蓝图.一旦你定义了类,就可以用关键字new根据类的蓝图创建对象.在类的定义里,可以放置字段和方法,这些被笼统地称为成员.对于字段,不管是val还是var定义的,都是指向对象的变 ...

  6. JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    原文地址:http://www.bitscn.com/pdb/ajax/316671.html 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? ...

  7. [UE4]射击起点、终点的计算方法

    一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...

  8. typescript静态属性,静态方法,抽象类,多态

    /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...

  9. SCCM 2012 R2实战系列之二:前提工作准备

    在上一篇中,我们完成了SQL Server 2012的安装和配置.现在跟大家分享SCCM安装前的准备工作. 2.1 SCCM 2012 R2 准备工作 2.1.1 创建并分配System Manage ...

  10. Java 日志

    Java日志: 参考博客:http://www.importnew.com/16331.html 当日志中包含满足特定条件的记录时,触发相应的通知机制,或者在程序运行出现错误时,快速的定位潜在的问题源 ...