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. windows server core 远程桌面

    要允许其它计算机透过远程桌面登入Server Core主机,我们需要先调整注册机码,并开启对应的防火墙端口号首先,我们开启登录编辑程序(regedit.exe),找到HKEY_LOCAL_MACHIN ...

  2. VS2017 远程调试linux(centos).net core

    第一步建立链接 Tools > Options > Cross Platform > Connection Manage 工具>选项>跨平台>连接管理器 第二步骤  ...

  3. spring4.0之一:简介

    我们共同来构建更好的企业应用.Spring帮助全世界的开发团队构建简单.便携.快速和灵活的基于JVM的系统和应用.这两句话已经足以说明Spring的目标,它针对的领域是企业应用,这套框架构建的应用有着 ...

  4. 1127 ZigZagging on a Tree (30 分)

    1127 ZigZagging on a Tree (30 分) Suppose that all the keys in a binary tree are distinct positive in ...

  5. 第一次有人把小米9快充讲的这么简单明了qc3.0 usb pd

    原文: http://www.chongdiantou.com/wp/archives/32093.html 2019年2月20日,小米在北京工业大学体育馆举办了盛况空前的小米9手机发布会,会上雷军揭 ...

  6. ORM多表操作之创建关联表及添加表记录

    创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...

  7. [UE4]模拟网络延迟和丢包

    进入游戏界面,按下键盘的“~”键,打开控制台界面,输入net会自动列出跟网络相关的命令 1.Net pktLag=,模拟延迟,单位是毫秒 2.Net PktLagVariance=300,在模拟延迟的 ...

  8. phpmyadmin在nginx环境下配置错误

    location ~ \.css {           add_header  Content-Type    text/css;        } location ~ \.js {        ...

  9. Mybatis 系列5-结合源码解析TypeHandler

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  10. Javascript-关于for in和forEach

    JS-for in:用来遍历对象 //遍历对象 for in var opts={name:'xiaofei',age:'28岁',job:'web前端工程师'} for (var k in opts ...