好长时间不写文章了,最近公司项目中用到了DataBinding,首次接触,就来和大家探讨下...哈哈

1. 为什么要使用DataBinding

1.目前一般情况下,我们在实现UI 界面时,通常都是使用 View.findViewById(); 各种更新 View 属性的 setter:setText(),setVisibility(),setEnabled() 或者 setOnClickListener() 等等这些重复而且没有营养的代码。写的越多,出现bug的几率就越多。
2.有了Databinding 就一样了,我们可以避免写很多“无用”的代码。
3.Databinding 是一个实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具,有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。
4.使用 Data Binding 会增加编译出的 apk 文件的类数量和方法数量。
新建一个空的工程,统计打开 build.gradle 中 Data Binding 开关前后的 apk 文件中类数量和方法数量,类增加了 120+,方法数增加了 9k+(开启混淆后该数量减少为 3k+)。
如果工程对方法数量很敏感的话,请慎重使用 Data Binding。

2. 如何使用DataBinding

最低需要Android 2.0的环境, Gradle 1.5 alpha 及以上自带支持 DataBinding,仅需在使用 DataBinding 的 module 里面的 build.gradle 里面加上配置即可:

 android {...dataBinding {enabled = true}...
}复制代码

如果gradle 的版本小于1.5,需要

 android {...dataBinding {enabled = true}...
}
dependencies{classpath 'com.android.tools.build:gradle:1.2.3'classpath 'com.android.databinding:dataBinder:1.0-rc0'
}
为用到 Data Binding 的模块添加插件,修改对应的 build.gradle。
apply plugin: 'com.android.databinding'复制代码

3.DataBinding 使用场景和表达式

使用场景

  • 单纯的摆脱findviewbyid
  • 绑定基本数据类型及String
  • 绑定Model数据包括imageURL
  • 绑定事件
  • 通过静态方法转换数据类型
  • 通过运算符操作数据
  • 自定义Binding的类名
  • 绑定相同Model的操作
  • model变量改变自动更新数据
  • 绑定List/Map等集合数据
  • Observable自动更新
  • Databinding与include标签的结合
  • DataBinding与RecyclerView的结合

表达式

  • 数学 + - / * %
  • 字符串连接 +
  • 逻辑 && ||
  • 二进制 & | ^
  • 一元运算 + - ! ~
  • 移位 >> >>> <<
  • 比较 == > < >= <=
  • instanceof
  • 分组 ()
  • null
  • Cast
  • 方法调用
  • 数据访问 []
  • 三元运算 ?:

示例:

android:text="@{String.valueOf(index + 1)}"android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"android:transitionName='@{"image_" + id}'复制代码

缺少的操作:

  • this
  • super
  • new
  • 显式泛型调用

Null 合并

?? - 左边的对象如果它不是null,选择左边的对象;或者如果它是null,选择右边的对象:

android:text="@{user.displayName ?? user.lastName}"复制代码

避免 NullPointerException

Data Binding代码生成时自动检查是否为null 来避免出现null pointer exceptions错误。例如,在表达式@{user.name}中,如果user是null,user.name会赋予它的默认值(null)。如果你引用user.age,age是int类型,那么它的默认值是0。

4. DataBinding 的简单使用

新建类 Person

            public class Person {                private String name;                private String sex;                private String age;                public String getName() {                    return name;                }                public Person(String name, String sex, String age) {                    this.name = name;                    this.sex = sex;                    this.age = age;                }                getter setter...            }复制代码

activity

binding = DataBindingUtil.setContentView(this, R.layout.activity_main);binding.setView(this);Person person = new Person("feng", "girl", 22);binding.setPerson(person);复制代码

activity_main.xml

复制代码

<data><variablename="view"type="com.xiaohong.fengok.MainActivity"/><import type="com.xiaohong.fengok.bean.Person"/><variablename="person"type="Person"/>
</data><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{person.age}"/>
</RelativeLayout></layout>复制代码

复制代码

复制代码

转载于:https://juejin.im/post/59e2b6db6fb9a0452935cb00

Data Binding 使用教程一相关推荐

  1. Spring认证中国教育管理中心-Spring Data Neo4j教程一

    原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器.请通过您的依赖管 ...

  2. 谷歌推荐Data Binding实现MVVM模式(完整文档)

    Data Binding 类库 这篇文档将教你如何运用 Data Binding 类库来编写声明试布局,并且尽量减少粘合代码对你的应用逻辑和布局上的绑定. Data Binding 是一种灵活和广泛兼 ...

  3. MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明)

    视频: MongoDB 教程一: 安装和使用 Mongodb启动命令mongod参数说明 我们可以通过mongod --help查看mongod的所有参数说明,以下是各参数的中文解释. 基本配置 –q ...

  4. R语言七天入门教程一:配置运行环境

    R语言七天入门教程一:配置运行环境 一.R语言介绍 1.R语言是什么? 参考:R语言教程-R语言介绍 R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析.绘图.数据挖掘.R语言有丰富的 ...

  5. Android开发教程 - 使用Data Binding(二)集成与配置

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

  6. XAML数据绑定(Data Binding)

    XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中,一 ...

  7. Data Binding Library数据绑定框架

    Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...

  8. AUTOCAD自学教程一

    AUTOCAD自学教程一 AUTOCAD自学教程 在学习任何一款软件的时候,第一步也是非常必要的一步就是如何的安装软件. 下面我们讲解如何的安装这个软件. 1.安装autocad 2.安装产品 3.正 ...

  9. android 高级项目,从零开始的Android新项目8 - Data Binding高级篇

    承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...

最新文章

  1. 月薪没到30K的程序员必须要背的面试八股文,我先啃为敬。。。
  2. 简述用UCenter整合第三方应用程序
  3. 一文彻底掌握二叉查找树
  4. 星益云聚合收银台系统源码
  5. nest.js 使用express需要提供多个静态目录的操作
  6. python ConfigParser模块 配置文件解析
  7. 灰度图像加性噪声污染和运动模糊图像复原
  8. 基于asp电子商城购物网站设计
  9. 模拟京东商城登陆HttpRequest
  10. 妙不可言的JASTVIN云域网,用过的都说好!你怎么看
  11. 角色设计竟然有这些小技巧
  12. 好佳居软装十大品牌 软装市场发展状况如何
  13. STM32F1与STM32CubeIDE编程实例-火焰传感器驱动
  14. 【算法】只有五行的Floyd最短路算法
  15. 常用数据库的基因ID
  16. 初识二维码 第二讲 二维码的结构
  17. Java 合并、拆分PPT幻灯片
  18. Linux系统man命令显示中文
  19. 虚拟内存如何设置最好?
  20. mysql Access denied for user 'root'@'localhost' (using password: YES)

热门文章

  1. CMM已经落伍了,敏捷才是王道
  2. Spring MVC【入门】就这一篇!
  3. iservice封装有哪些方法_对WebService的一些封装技巧总结
  4. 坐标轨迹计算_工业机器人工具坐标系和用户坐标系的区别与联系
  5. 机器学习方向企业面试题(二)
  6. 我可能不适合做前端,你呢?
  7. 6个最热门的IT技术职位,薪资都有多高?
  8. PHP第十次实验总结,The Clean Architecture in PHP 读书笔记(十)
  9. 软件中打开其他软件的方式
  10. 魔术方法 python_python所有的魔术方法