Data Binbing框架是在2015年Google I/O大会上最早提出来的,一直在Android开发者中热议,但是很少有真正在项目中用到。本文简单介绍Data Binding框架的简单用法以及其特点。

Android官网已经提供了支持Data Binding的support library,支持Android 2.1(API level 7+)以上版本。与常规Android工程配置相比,Data Binding支持需要配置如下编译环境:

  1. Android Studio 1.3以上才支持Android数据绑定
  2. 在Android SDK manager中下载最新的Android Support Library
  3. 在app工程build.gradle中配置dataBinding支持开关
  4. 在build.gradle添加dataBinding依赖库

build.gradle配置如下:

android {
....
// dataBindng开关
dataBinding {
enabled = true
}
} dependencies {
....
// 添加dataBinding支持依赖库
compile 'com.android.support:appcompat-v7:23.3.0'
}

Hello DataBinding

DataBinding Layout

DataBinding layout文件与普通layout有所不同,它的布局根节点是layout,下面是数据节点data,跟data同一层级是正常的layout布局文件。main_activity.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="user" type="com.jimmy.demo.databinding.simple.model.User"/>
</data> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.jimmy.demo.databinding.simple.MainActivity"> <TextView
android:id="@+id/tv_name"
android:text="@{user.na 大专栏  Data Binding on Androidme}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/tv_age"
android:text="@{String.valueOf(user.age)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/tv_name"
android:layout_marginLeft="10dp"/>
</RelativeLayout>
</layout>

data中申明了变量user,type属性指定了user对应的Java类com.jimmy.demo.databinding.simple.model.User。User是一个普通的Java实体类:

public class User {

    public String name;
public int age; public User(String name, int age) {
this.name = name;
this.age = age;
} }

申明了user变量,在后面的布局中就可以用@{}语法表达式的方式使用user属性,如上面布局文件中TextView属性android:text=”@{user.name}”,由于user.age是int类型,所以使用的时候需要转换成String类型,String是常用类在布局文件中不需要import就能直接使用。

这里就可以看到数据绑定的特点,布局文件中属性值绑定之后是可以动态变化的,而不需要通过在代码中找到对应View逐一修改。

Binding Data

完成data-binding布局文件,会默认生成对应的class(例如上面的main_activity.xml会生成MainActivityBinding.class)也可以在布局文件data节点中添加class属性指定Binding class名字。

<data class="com.jimmy.demo.MyBinding">
....
</data>

在Activity或者Fragment中用DataBindingUtil设置布局,返回Binding class对象,这里是MainActivityBinding对象,然后绑定User实体数据。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
user = new User("Amanada", 25);
binding.setUser(user);
}

至此,一个简单的Android数据绑定demo就完成了,运行demo可以看到两个TextView的值分别为Amanda和25。

Data Binding on Android的更多相关文章

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

    1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...

  2. 完全掌握Android Data Binding

    转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 来源 https://github.com/L ...

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

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

  4. Android Data Binding高级用法-Observable、动态生成Binding Class(三)

    设置View的id 虽然说Data Binding这种分层模式使得我们对数据的传递简单明了,一般情况下我们可以不设置View的id,不使用findViewById即可对View进行数据上一系列的操作, ...

  5. Android Data Binding语法解析(二)

    上篇我们知道了Data Binding的最简单的用法,那么Data Binding其中最为重要也是最复杂的其实就是在xml布局文件中给对应的控件进行数据绑定了,接下来就一一说明Data Binding ...

  6. Android Data Binding实战(一)

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

  7. Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础

    原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...

  8. android -------- Data Binding的使用 RecyclerView

    今天来说说DataBinding在列表RecyclerView中的使用 列表绑定 App中经常用到列表展示,Data Binding在列表中一样可以扮演重要的作用,直接绑定数据和事件到每一个列表的it ...

  9. android -------- Data Binding的使用 ( 六) 自定义属性

    今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义 ...

随机推荐

  1. matlab中画一条折线时怎样显示出每个点折点的数值

    举个例子: num=[5,44,62,154,264,365,398,480,619,705,762,728,669,726,890,731,707,696,558,509,444];date=[1. ...

  2. js中将json字符串转换成json对象

    在我们使用js请求后台控制器传回的结果result值的时候,经常会出现返回结果值为json字符串的情况,字符串无法在js中直接使用 返回样式栗子: 这是一个json字符串:result = " ...

  3. 图形化编程娱乐于教,Kittenblock实例,图章效果的音乐画面

    跟很多学生聊过,很多学生不是不努力,只是找不到感觉.有一点不可否认,同样在一个教室上课,同样是一个老师讲授,学习效果迥然不同.关键的问题在于,带入感,我能给出的建议,就是咬咬牙,坚持住,没有学不会的知 ...

  4. 201609-1 最大波动 Java

    用绝对值,后一天减去前一天即可 import java.util.Scanner; public class Main { public static void main(String[] args) ...

  5. c#学习笔记04——ADO.NET

    ADO.NET结构:ADO.NET建立在几个核心类之上,这些类可以分为两组 包含和管理数据的类:DataSet DataTable DataRow DataRelation... 链接数据源的类:Co ...

  6. tensorflow deeplabv3 训练自己的数据集

    https://blog.csdn.net/malvas/article/details/90776327

  7. JavaSE--数字签名之校验签名

    参考:http://blog.csdn.net/dotuian/article/details/51722300 关于keystore的简单介绍 Keytool是一个Java数据证书的管理工具 ,Ke ...

  8. zxing生成二维码转base64 img直接显示 Image对象转Base64码(java)

    public static String encodeToBase64(String content){ MultiFormatWriter multiFormatWriter = new Multi ...

  9. SQL: all 运算符 可以 表示 非空(NOT NULL)的意思吗?

    select count(all grade) from customer; SELECT COUNT(DISTINCT customer_id) FROM customer WHERE grade ...

  10. 5314跳跃游戏IV

    题目:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0).每一步,你可以从下标 i 跳到下标:    i + 1 满足:i + 1 < arr.length    i - 1 ...