Data Binding on Android
Data Binbing框架是在2015年Google I/O大会上最早提出来的,一直在Android开发者中热议,但是很少有真正在项目中用到。本文简单介绍Data Binding框架的简单用法以及其特点。
Android官网已经提供了支持Data Binding的support library,支持Android 2.1(API level 7+)以上版本。与常规Android工程配置相比,Data Binding支持需要配置如下编译环境:
- Android Studio 1.3以上才支持Android数据绑定
- 在Android SDK manager中下载最新的Android Support Library
- 在app工程build.gradle中配置dataBinding支持开关
- 在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的更多相关文章
- Data Binding(数据绑定)用户指南
1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...
- 完全掌握Android Data Binding
转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 来源 https://github.com/L ...
- Android Data Binding代码实践(告别findViewById)(四)
Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...
- Android Data Binding高级用法-Observable、动态生成Binding Class(三)
设置View的id 虽然说Data Binding这种分层模式使得我们对数据的传递简单明了,一般情况下我们可以不设置View的id,不使用findViewById即可对View进行数据上一系列的操作, ...
- Android Data Binding语法解析(二)
上篇我们知道了Data Binding的最简单的用法,那么Data Binding其中最为重要也是最复杂的其实就是在xml布局文件中给对应的控件进行数据绑定了,接下来就一一说明Data Binding ...
- Android Data Binding实战(一)
在今年Google I/O大会上,Google推出Design Library库的同时也推出了Android Data Binding,那么什么是Data Binding?其名曰数据绑定,使用它我们可 ...
- Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础
原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...
- android -------- Data Binding的使用 RecyclerView
今天来说说DataBinding在列表RecyclerView中的使用 列表绑定 App中经常用到列表展示,Data Binding在列表中一样可以扮演重要的作用,直接绑定数据和事件到每一个列表的it ...
- android -------- Data Binding的使用 ( 六) 自定义属性
今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义 ...
随机推荐
- Android :TextView使用SpannableString设置复合文本
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...
- 如何在Foxwell NT650 OBD2扫描仪上查看实时PID数据?
这是在Foxwell NT650扫描仪上使用实时数据菜单的操作指南 . 实时数据菜单使您可以查看和记录来自电子控制模块的实时PID数据.菜单选项通常包括: 完整的数据清单 自定义数据列表 如何使用“完 ...
- c语言中常用的串运算
调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from) 串连接,strca ...
- blocking(非阻塞)回调函数
回调函数不会造成阻塞 function loop() { setTimeout(loop, 0) } loop 死循环 while(true)
- springmvc中那些易被忽略的小知识点
1.springmvc会为没有view的modelandview指定默认view 知道这个的时候我都惊呆了. 我从来都是手动指定view名字,今天看到别人写的代码竟然直接返回了个mav,貌似是在dis ...
- [Scoi2016]背单词(trie+贪心)
题意:重新解释一下题意吧(题意晦涩难懂) 给定n个单词,你可以按照顺序学习,当学习这一单词时,这个单词是第x个要学习的单词,需要的代价分三类: 1.若存在其他单词是其后缀没被学习,则代价为n2 2.若 ...
- \_\_doc\_\_
__doc__ 注释信息 一.doc 返回类的注释信息 class Foo: '我是描述信息' pass print(Foo.__doc__) 我是描述信息 该属性无法被继承 class Foo: ' ...
- Microsoft .NET Framework 4.5.2 (Offline Installer)
Microsoft .NET Framework 4.5.2 (Offline Installer) for Windows Vista SP2, Windows 7 SP1, Windows 8, ...
- 2019深圳Android千人开发者大会【NEW·无界】
报名地址:https://www.hdb.com/dis/mjcsegnslu 安卓巴士技术社区是中国领先的安卓开发者社区,现已聚集超过85万开发者,数年来一直致力于IT从业者的知识分享服务. 安卓巴 ...
- elasticsearch 大集群,双重别名,滚动更新分词方案
elasticsearch 滚动更新分词 国内用ik.hanlp.ansj或基于其二次开发的比较多 必然有分词变更的操作(主要是是加词) reindex+别名可以解决一部分问题,但在大集群上会影响业务 ...