android -------- Data Binding的使用(一)
Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用
面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助
描述:
Data Binding 是把数据直接绑定到 XML 文件上,并能实现自动刷新。
Data Binding 减少了代码的耦合性,一些如 findViewById、setText 之类的操作都可以通过绑定实现。
Data Binding 是MVVM模式开发的
Google 官方文档:https://developer.android.google.cn/reference/android/databinding/package-summary
配置:
环境要求:
系统版本:Android 2.1(API level 7)及以上
Gradle版本:1.5.0-alpha1及以上
Android Studio版本:1.3及以上
在app根目录的build.gradle文件中加入Data Binding配置:
android {
compileSdkVersion 22
buildToolsVersion "27.0.3"
dataBinding {
enabled = true
}
.....
}
简单的一个案例 :布局中绑定数据
先写一个实体类
public class Employee {
public Employee(String frstName,String lastName){
this.frstName = frstName;
this.lastName = lastName;
}
private String frstName;
private String lastName;
public String getFrstName() {
return frstName;
}
public void setFrstName(String frstName) {
this.frstName = frstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
布局文件 activity_main.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"
xmlns:bind="http://schemas.android.com/apk/res-auto"> <data>
<variable
name="employee"
type="com.zhangqie.databinding.demo1.Employee"/><!-- 实体类的地址 -->
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
> <TextView
android:id="@+id/tv_name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/tv_name2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{employee.frstName}"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{employee.lastName}"
/>
</LinearLayout>
</layout>
由上面可看出
我们在最外层再套一层 标签layout,里面包含了 data标签和LinearLayout标签
data 标签下面的 variable 定义数据绑定用的实体类
type 里面是完整的带包名的类,
name 自定义一个名称,下面具体绑定的时候就是用的这个名称。
layout标签的定义会默认生成一个数据绑定类 (类名根据文件的名称来生成)
编译一下我就会生成了一个 ActivityMainBinding的类了
之后MainActivity中
public class MainActivity extends AppCompatActivity {
Employee employee = new Employee("切切歆语","小张");
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
//直接访问Id 设置属性
binding.tvName1.setText("小张");
binding.tvName2.setText("歆语");
//传对象绑定数据
//两种方式一样
binding.setEmployee(employee);
//binding.setVariable(com.zhangqie.databinding.BR.employee,employee);
}
}
这样看起来是不是方便了很多呢
运行效果:

特点:
MVVM 的实现
提高开发效率
性能高 ,功能强
上面是Data Binding的基本用法,当然还有其它很多的高级用法,更新中...
android -------- Data Binding的使用(一)的更多相关文章
- Android Data Binding代码实践(告别findViewById)(四)
Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...
- Android Data Binding实战(一)
在今年Google I/O大会上,Google推出Design Library库的同时也推出了Android Data Binding,那么什么是Data Binding?其名曰数据绑定,使用它我们可 ...
- Android Data Binding Library
Data Binding Library Data Binding Library是一个支持库,允许您使用声明格式(而不是编程)将布局中的UI组件与应用程序中的数据源绑定. 布局通常在调用UI框架方法 ...
- Android Data Binding
Android官方数据绑定框架DataBinding, 1.什么是DataBinding 2.DataBinding基础用法 3.DataBinding原理 4.表达式 5.null检查 6.incl ...
- Android Data Binding(数据绑定)用户指南
Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...
- android data binding jetpack VIII BindingConversion
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VII @BindingAdapter
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VI 清理一些概念。BR 运算表达式
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack IV 绑定一个方法另一种写法和参数传递
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
随机推荐
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(1)
1.SQL相关 名称 类型 说明 BaseSQL String 没有被AddWhere.SetOrderBy.FilterSQL等方法处理过的原始SQL语句 FinalSQL String 被AddW ...
- Flask学习【第2篇】:Flask基础
知识点回顾 flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 实例化Flask对象,里面是有参数的 app = Flask(__name__,template_ ...
- centos设置中文输入法无效的解决办法
安装 im-chooser: yum install im-chooser 回到当前使用的普通用户,设置 ibus 输入法为默认输入系统: imsettings-switch ibus
- bzoj1565: [NOI2009]植物大战僵尸 最大权闭合子图,tarjan
bzoj1565: [NOI2009]植物大战僵尸 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1565 思路 很容易的想到最大权闭合子图 ...
- 笔记本电脑切换到无线热点无法联网问题&Spring Cloud相关工程启动报错问题
通过禁用本地网络,和禁用另一个无线网络,以及禁用后重开,修改密码,重连的方式均失败后, 使用IE浏览器浏览提示失败,点击诊断,诊断出DNS服务器无响应异常. 突然想到通过ipconfig查看ip,网关 ...
- HDU 6061 RXD and functions(NTT)
题意 给定一个\(n\) 次的 \(f\) 函数,向右移动 \(m\) 次得到 \(g\) 函数,第 \(i\) 次移动长度是 \(a_i\) ,求 \(g\) 函数解析式的各项系数,对 ...
- 【Hadoop 分布式部署 八:分布式协作框架Zookeeper架构功能讲解 及本地模式安装部署和命令使用 】
What is Zookeeper 是一个开源的分布式的,为分布式应用提供协作服务的Apache项目 提供一个简单的原语集合,以便与分布式应用可以在他之上构建更高层次的同步服务 设计非常简单易于编 ...
- .NET 介绍
In order to continue our effort of being modular and well factored we don’t just provide the entire ...
- Jupyter Notebook主题字体设置及自动代码补全
Jupyter Notebook用久了就离不开了,然而自带的主题真的不忍直视.为了视力着想,为了自己看起来舒服,于是折腾了一番..在github上发现了一个jupyter-themes工具,可以通过p ...
- JavaScript——语法与数据类型
严格模式 ECMA5引入了严格模式的概念.严格模式是为JavaScript定义了一种不同的解析与执行模型.在严格模式下,ECMA3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误.要 ...