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. 前端入门应该掌握的html+css知识点

    * 文档流 元素从上自下从左到右排列,即文档流 (所以一个普通的元素前面有一个向右浮动的元素,这个元素不会和这个浮动元素发生重叠,但是如果这个普通元素前面是一个向左浮动的元素,可以看到 元素会和浮动元 ...

  2. CenOS下搭建PPTP服务

    公司生产环境使用的是阿里云主机,采用的是两台nginx主机进行反向代理,现在需要内网一台服务器能够访问公网,所以在nginx服务器上搭建了VPN服务,用于进行内网访问公网. 系统环境:CenOS 6. ...

  3. 不同三级域名与二级域名之间互相共享Cookie

    当你在项目中遇到这样一个问题,有多个站点在多个二级级域名如果要实现各域名站点下的登录状态共享,那么最简单的方法就是共享Cookie. 首先声明几个概念,域名怎么去区分. 顶级域名:.com,.cn,. ...

  4. [UE4]点积、余弦和急停

    急停控制:

  5. [UE4]射击产生弹孔:Spawn Decal At Location、Spawn Decal Attached

    Spawn Decal At Location.Spawn Decal Attached 在指定的位置生成一个材质贴上去 产生随意旋转角度

  6. Java中的Future相关

    先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...

  7. win10配置labelImg

    [引言]在目标检测中,需要用图像标注工具标注图像,如Labelme . labelImg等,本文使用的是LabelImg ,LabelImg在Ubuntu下很好部署, 在win10中有些地方要注意下, ...

  8. Linux CentOS更改文件的权限

    chgrp  (全称:change group) groupadd testgroup 添加用户组 chgrp testgroup test1 修改文件的所属用户组是testgroup. 如果test ...

  9. Eclipse中Activiti插件的安装

    要想使用Activiti流程引擎,需要在Eclipse安装Activiti插件,才能画流程设计图. 打开Eclipse,点击help -> Install new Software 然后点击 A ...

  10. javascript-回归原生基础

    //添加事件监听兼容函数 function addHandler(target, eventType, handler){ if(target.addEventListener){//主流浏览器 ad ...