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】之获取HTTP请求的值常用方法

    logger.info("销帐完成通知回调,请求URL:"+req.getRequestURI().toString()); InputStream in = req.getInp ...

  2. Javascript中的原型、原型链(十)

    一.原型 每当创建一个函数时,函数就会包含一个prototype属性,这个属性其实相当于一个指针,指向调用该构造函数创建的对象原型. 这个对象原型里面有一个constructor属性,这个属性又指向构 ...

  3. JavaScript和HTML DOM的区别与联系

    JavaScript和HTML DOM的区别与联系 区别: javascript JavaScript 是因特网上最流行的浏览器脚本语言.很容易使用!你一定会喜欢它的! JavaScript 被数百万 ...

  4. 文字超长隐藏为...ie7不兼容的解决办法

    把li里的a设置display:block; 代码如下: html: <ul> <li><span>2014-8-27</span><a href ...

  5. [UE4]控件模板参数

    创建的时候就会变成这样了.

  6. 在MySQL中实现Rank高级排名函数

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  7. 第32课 Linux内核链表剖析

    1. Linux内核链表的位置及依赖 (1)位置:{linux-2.6.39}\\include\linux\list.h (2)依赖 ①#include<linux\types.h> ② ...

  8. (转)C#读写共享文件

    原文地址:https://www.cnblogs.com/guohu/p/4694515.html using System; using System.Collections.Generic; us ...

  9. Mysql 中获取刚插入的自增长id的值

    insert into user (username,password) VALUES ('); //获取刚插入的自增长id的值 select last_insert_id(); 在MySQL中,使用 ...

  10. mysql的DATE_FORMAT参数格式

    mysql有个字段是DATETIME类型,要实现可以按月统计,该怎么写sql语句?select month(f1) from tt group by month(f1)or select DATE_F ...