Data Binding 使用教程一
好长时间不写文章了,最近公司项目中用到了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 使用教程一相关推荐
- Spring认证中国教育管理中心-Spring Data Neo4j教程一
原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程一(Spring中国教育管理中心) 5. 开始 我们为 SDN 提供了 Spring Boot 启动器.请通过您的依赖管 ...
- 谷歌推荐Data Binding实现MVVM模式(完整文档)
Data Binding 类库 这篇文档将教你如何运用 Data Binding 类库来编写声明试布局,并且尽量减少粘合代码对你的应用逻辑和布局上的绑定. Data Binding 是一种灵活和广泛兼 ...
- MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明)
视频: MongoDB 教程一: 安装和使用 Mongodb启动命令mongod参数说明 我们可以通过mongod --help查看mongod的所有参数说明,以下是各参数的中文解释. 基本配置 –q ...
- R语言七天入门教程一:配置运行环境
R语言七天入门教程一:配置运行环境 一.R语言介绍 1.R语言是什么? 参考:R语言教程-R语言介绍 R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析.绘图.数据挖掘.R语言有丰富的 ...
- Android开发教程 - 使用Data Binding(二)集成与配置
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- XAML数据绑定(Data Binding)
XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中,一 ...
- Data Binding Library数据绑定框架
Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...
- AUTOCAD自学教程一
AUTOCAD自学教程一 AUTOCAD自学教程 在学习任何一款软件的时候,第一步也是非常必要的一步就是如何的安装软件. 下面我们讲解如何的安装这个软件. 1.安装autocad 2.安装产品 3.正 ...
- android 高级项目,从零开始的Android新项目8 - Data Binding高级篇
承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...
最新文章
- 月薪没到30K的程序员必须要背的面试八股文,我先啃为敬。。。
- 简述用UCenter整合第三方应用程序
- 一文彻底掌握二叉查找树
- 星益云聚合收银台系统源码
- nest.js 使用express需要提供多个静态目录的操作
- python ConfigParser模块 配置文件解析
- 灰度图像加性噪声污染和运动模糊图像复原
- 基于asp电子商城购物网站设计
- 模拟京东商城登陆HttpRequest
- 妙不可言的JASTVIN云域网,用过的都说好!你怎么看
- 角色设计竟然有这些小技巧
- 好佳居软装十大品牌 软装市场发展状况如何
- STM32F1与STM32CubeIDE编程实例-火焰传感器驱动
- 【算法】只有五行的Floyd最短路算法
- 常用数据库的基因ID
- 初识二维码 第二讲 二维码的结构
- Java 合并、拆分PPT幻灯片
- Linux系统man命令显示中文
- 虚拟内存如何设置最好?
- mysql Access denied for user 'root'@'localhost' (using password: YES)