Data Binding Library

用官方提供的Data Binding Library,可以最大限度的减少findViewById(),setOnClickListener()之类的胶水代码,使代码更优雅维护性更高.并且比起findViewById(),所有view是一次性初始化完成,性能更优.

Data Binding Library不错的兼容性,支持Android 2.1以后的版本.

需要 Android Plugin for Gradle 1.5.0-alpha1或以上版本.

至于怎么升级?

https://developer.android.com/studio/releases/gradle-plugin.html#updating-plugin

使用环境

在Android Studio 1.3或以上版本,提供Data Binding Library支持

app的build.gradle中,一行代码搞定.

android {
    ....
    dataBinding {
        enabled = true
    }
}

在布局文件中使用Data Binding Library

在原来布局文件中,加入<layout>根标签.

就像下面这样:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>

注意:

<data>标签下的变量user可以在布局中使用,这个user的类型是"com.example.User".

设置这个变量的方法是setUser();我们会在下面学到.

在布局文件中,使用"@{}"语法,

android:text="@{user.firstName}"

这便实现了数据和view的绑定.

数据类User

User类是POJO类型的情况:

public class User {
public final String firstName;
public final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}

User类是JavaBean类型的情况:

public class User {
private final String firstName;
private final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}

这两种情况,在使用TextView中使用@{user.firstName}表达式,上面的User类,会用firstName成员变量(filed)来设置text.下面的JavaBean会调用getFirstName()方法来设置text.

当然,如果firstName()方法存在的话,就会调用这个方法.

绑定数据

默认情况下,绑定的类会自动生成,名字是layout文件的名字(如main_activity.xml生成为MainActivityBinding.java),首字母和下划线后字母大写,增加Binding后缀.

提示:我们可以自定义生成绑定类的名字,只需要在<data>标签内增加class="CustomerClassName"

<data class=“CustomerClassName”>

</data>

这个生成的类包括所有view和该view应该显示的数据,并且知道如何为view分配应该显示的值.

最简单的绑定方法就是在布局界面填时设置绑定:

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

好的.一个简单的例子就完成了.运行这个app,你会看到如你所想的这个界面:

当然上面的例子是使用:

MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity)

获得binding对象,然后使用binding.setUser(),设置user.

下篇再见

(Android MVVM)使用Data Binding Library(1)的更多相关文章

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

    复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...

  2. Android Data Binding Library

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

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

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

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

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

  5. Android开发教程 - 使用Data Binding Android Studio不能正常生成相关类/方法的解决办法

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  6. Android-MVVM架构-Data Binding的使用

    项目整体效果: Awesome-Android-MVVM 什么是MVVM, 为什么需要 MVVM? 如何在Android中使用Data Binding实现MVVM架构? 什么是MVVM , 为什么需要 ...

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

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

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

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

  9. Android Data Binding实战(一)

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

随机推荐

  1. apache httpd 2.4 httpd

    This is a wiki containing user-contributed recipes, tips, and tricks for the Apache HTTP Server (aka ...

  2. Oracle修改序列(Sequence)起始值问题

    Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多. 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改 ...

  3. POJ1661 Help Jimmy —— DP

    题目链接:http://poj.org/problem?id=1661 Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  4. YTU 2895: H--唱歌的鸟儿

    2895: H--唱歌的鸟儿 时间限制: 1 Sec  内存限制: 128 MB 提交: 26  解决: 10 题目描述 烟大东门有一棵大杨树,树上经常会有很多鸟儿飞来飞去.春天来了,学生物的小姜发现 ...

  5. try-with-resources使用示例

    try (InputStream is = new FileInputStream("test")) { is.read(); ... } catch(Exception e) { ...

  6. Ubuntu Nginx uwsgi django 初试

    /************************************************************************************** * Ubuntu Ngi ...

  7. shell 与 空格

    shell脚本中,不能随意添加空格,否则出错: 1,=等号两边必须无空格.否则出错.如i =$1和i= $1都是错的.但是在()内部不限制如for ((i= 1;i < 3;i= i+1))是正 ...

  8. css层叠上下文和层叠顺序

    普通元素的层叠水平优先由层叠上下文决定,因此,层叠水平的比较只有在当前层叠上下文元素中才有意义. 诸位千万不要把层叠水平和CSS的z-index属性混为一谈.没错,某些情况下z-index确实可以影响 ...

  9. Java Socket实战之五:使用加密协议传输对象

    转自:http://developer.51cto.com/art/201202/317547.htm 前面几篇博文提到了Socket中一些常用的用法,但是对于一些有安全要求的应用就需要加密传输的数据 ...

  10. ExtJS Form

    form表单中多选框和复选框 Ext.require([ 'Ext.form.*', 'Ext.layout.container.Column', 'Ext.window.MessageBox', ' ...