告别findViewById(),ButterKnife,使用Google Data Binding Library(1)
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.
下篇再见
告别findViewById(),ButterKnife,使用Google Data Binding Library(1)的更多相关文章
- Android Data Binding Library
Data Binding Library Data Binding Library是一个支持库,允许您使用声明格式(而不是编程)将布局中的UI组件与应用程序中的数据源绑定. 布局通常在调用UI框架方法 ...
- (Android MVVM)使用Data Binding Library(1)
Data Binding Library 用官方提供的Data Binding Library,可以最大限度的减少findViewById(),setOnClickListener()之类的胶水代码, ...
- (Android MVVM)使用Data Binding Library(2)
复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...
- android -------- Data Binding的使用(一)
Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用 面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助 描述: Data ...
- Android Data Binding代码实践(告别findViewById)(四)
Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...
- Data Binding Guide——google官方文档翻译(下)
这篇博客是Data Binding Guide官网文档翻译的下篇.假设没看过前半部分翻译的能够先看Data Binding Guide--google官方文档翻译(上) 一,数据对象 不论什么不含业 ...
- Android Data Binding实战(一)
在今年Google I/O大会上,Google推出Design Library库的同时也推出了Android Data Binding,那么什么是Data Binding?其名曰数据绑定,使用它我们可 ...
- 从零開始的Android新项目7 - Data Binding入门篇
Data Binding自从去年的Google I/O公布到至今,也有近一年的时间了.这一年来,从Beta到如今比較完好的版本号.从Android Studio 1.3到如今2.1.2的支持,能够说D ...
- Data Binding(数据绑定)用户指南
1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...
随机推荐
- 前端布局常见IE6 bug的解决方法,清除浮动的几种方法以及各自的优缺点
相信有很多前端的朋友再布局的时候经常面对IE6咬牙切齿,尤其是刚刚入行的朋友,在这里给大家一点常见问题的解决方案,希望对大家有所帮助 1)png24位的图片在iE6浏览器上出现背景,解决方案是做成PN ...
- SQL SERVER - 谈死锁的监控分析解决思路
1 背景 1.1 报警情况 最近整理笔记,打算全部迁移到EVERNOTE.整理到锁这一部分,里边刚好有个自己记录下来的案例,重新整理分享下给大家. 某日中午,收到报警短信,DB死锁异常,单分钟死锁12 ...
- jquery 的基础知识,以及和Javascript的区别
想到之前所学的javascript 我们会想到这几个方面:找元素: 操作内容: 操作属性:操作样式:统一操作元素: jquery 也是从这几个方面来学习的. <head> <meta ...
- H5微场景宽、高度自适应办法
最近在做一些手机端微场景,发现处理各种手机屏幕分辨率是个很让人头疼的事情,最终找到了一个处理效果比较满意的方案.各位客观请往下看: 如果有过做微场景经历的客官们应该都了解,在代码中给一个元素的宽高设成 ...
- Java日志工具之SLF4J
SLF4J全称为Simple Logging Facade for Java (简单日志门面),作为各种日志框架的简单门面或者抽象,包括 java.util.logging, log4j, logba ...
- Convert Sorted Array to Binary Search Tree & Convert Sorted List to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Su ...
- 关于JAVA中抽象类和接口的区别辨析
今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...
- self-question
需要即刻提升的几大能力: 1.重装系统和安装各种软件 2.自学能力,多从实际案例中总结,多归纳反思 3.拓展人际关系,和别人沟通交流 4.遇到困难迎刃而上,而不是回避退缩
- (4)Object对象的几个常用方法
Object对象是java中对象的始祖,其有一些方法是经常需要我们来改写的: toString方法 该方法是Object的方法,Object的这的方法返回的是对象的文件结构加上对象的hashcode, ...
- JavaScript入门必备
1.JavaScript和Java没有关系,JavaScript是一门(客服端)脚本语言,并且是一个解释性语言. 2.添加JavaScript的方法 (1)内联:通过<script>js代 ...