数据绑定(data binding)

简介: 据绑定(Data Binding)-Part2 原文链接 : Data Binding – Part 2原文作者 : Mark Allison译文出自 : 开发技术前线 www.devtf.cn。未经允许,不得转载!译者 : desmond1121校对者: desmond1121 在之前我们做了一个简单的Twitter客户



据绑定(Data Binding)-Part2

在之前我们做了一个简单的Twitter客户端,但是简单地介绍ViewHolder实现,可能没有充分地让你明白Data Binding的使用方法。那么我们现在就来看看怎么样将Data Binding引入到项目中。

首先我们要在工程目录下的gradle脚本添加依赖:

在要在使用Data Binding的module下的gradle脚本中添加依赖:

你会发现在后面这个gradle脚本中没有添加data binding依赖——它实际上只是在构建项目的时候附加的工具。

你应该在这个操作方法中领悟到一些东西:实际上Data Binding只是一个代码生成工具,它会在build项目的时候生成一些绑定View和数据对象的模板代码。

在我们的例子中,它解析目标是layout/status_item.xml中的节点。根据布局文件的文件名,它会自动生成一个数据绑定类StatusItemBinding,我们在StatusViewHolder使用的就是这个神秘的类。

之后Data Binding将包装去掉,由于在StatusItemBinding类中已经解析出了属性,它同时也会移除节点,只剩下RelativeLayout。换句话说,它将这个文件变回了普通的XML layout文件,并添加了一个数据绑定类实时更新其中的内容。

我们再重温一下StatusViewHolder的代码,现在应该明白一点它的运作机制了吧:

DataBindingUtil.bind(itemView)方法会在build的时候自动生成。这时候我们需要做的是在bind(Status status)中调用StatusItemBinding的setter方法,将我们在中声明的数据对象(.data.Status)赋值给它。之后我们要显式地调用bind(Status status)方法将数据实体与它绑定。

你可以从我们的例子中初步看出数据绑定的效果:

part-1

这一切都运作的非常好,就是一个含有三个子view的布局被绑定了,data binding看起来也没为我们省去很多工作,也只是省去了findView与setText()两个操作而已。但是它所能做的并不仅仅是这样!可能有人注意到了我们同时从twitter的API中获取了头像的url,layout中我们没有对ImageView进行绑定。在下一章中我们将会引入Glide来加载图像,并将它与Data Binding结合起来。

本文章主要用于解释原理,没有添加额外代码。前文中的例子在这里可以看到。

据绑定(Data Binding)-Part2

在之前我们做了一个简单的Twitter客户端,但是简单地介绍ViewHolder实现,可能没有充分地让你明白Data Binding的使用方法。那么我们现在就来看看怎么样将Data Binding引入到项目中。

首先我们要在工程目录下的gradle脚本添加依赖:

在要在使用Data Binding的module下的gradle脚本中添加依赖:

你会发现在后面这个gradle脚本中没有添加data binding依赖——它实际上只是在构建项目的时候附加的工具。

你应该在这个操作方法中领悟到一些东西:实际上Data Binding只是一个代码生成工具,它会在build项目的时候生成一些绑定View和数据对象的模板代码。

在我们的例子中,它解析目标是layout/status_item.xml中的节点。根据布局文件的文件名,它会自动生成一个数据绑定类StatusItemBinding,我们在StatusViewHolder使用的就是这个神秘的类。

之后Data Binding将包装去掉,由于在StatusItemBinding类中已经解析出了属性,它同时也会移除节点,只剩下RelativeLayout。换句话说,它将这个文件变回了普通的XML layout文件,并添加了一个数据绑定类实时更新其中的内容。

我们再重温一下StatusViewHolder的代码,现在应该明白一点它的运作机制了吧:

DataBindingUtil.bind(itemView)方法会在build的时候自动生成。这时候我们需要做的是在bind(Status status)中调用StatusItemBinding的setter方法,将我们在中声明的数据对象(.data.Status)赋值给它。之后我们要显式地调用bind(Status status)方法将数据实体与它绑定。

你可以从我们的例子中初步看出数据绑定的效果:

part-1

这一切都运作的非常好,就是一个含有三个子view的布局被绑定了,data binding看起来也没为我们省去很多工作,也只是省去了findView与setText()两个操作而已。但是它所能做的并不仅仅是这样!可能有人注意到了我们同时从twitter的API中获取了头像的url,layout中我们没有对ImageView进行绑定。在下一章中我们将会引入Glide来加载图像,并将它与Data Binding结合起来。

本文章主要用于解释原理,没有添加额外代码。前文中的例子在这里可以看到。

目录
相关文章
|
7月前
|
XML JSON JavaScript
什么是 SAP UI5 的 Element binding
什么是 SAP UI5 的 Element binding
40 0
|
开发者
134. SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析
134. SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析
SAP UI5 binding, property binding and resourceBinding
Created by Wang, Jerry, last modified on May 21, 2015
94 0
SAP UI5 binding, property binding and resourceBinding
|
XML JavaScript 数据格式
UI binding render - how to check
Created by Jerry Wang, last modified on May 14, 2015
UI binding render - how to check
SAP UI5 binding syntax - model name + + attribute name
Created by Wang, Jerry, last modified on May 22, 2015
109 0
SAP UI5 binding syntax - model name + + attribute name
|
C#
WPF QuickStart系列之数据绑定(Data Binding)
原文:WPF QuickStart系列之数据绑定(Data Binding) 这篇博客将展示WPF DataBinding的内容。 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Target需要有依赖属性。
1177 0
|
IDE 开发工具 Android开发
Android开发教程 - 使用Data Binding(五)数据绑定
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 ...
1027 0
|
容器 C#
数据绑定(四)使用DataContext作为Binding的Source
原文:数据绑定(四)使用DataContext作为Binding的Source DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件都具备这个属性,...
1045 0
|
XML 数据格式
数据绑定(七)使用ObjectDataProvider对象作为Binding的Source
原文:数据绑定(七)使用ObjectDataProvider对象作为Binding的Source ObjectDataProvider就是把对象作为数据源提供给Binding,类似的还有XmlDataProvider...
767 0
|
容器
数据绑定(八)使用Binding的RelativeSource
原文:数据绑定(八)使用Binding的RelativeSource 当一个Binding有明确的数据来源时可以通过为Source或ElementName赋值的办法让Binding与之关联,有的时候由于不能确定Source的对象叫什么名字,但知道它与作为Binding目标的对象在UI布局上有相对关系,比如控件自己关联自己的某个数据、关联自己某级容器的数据,就要使用Binding的RelativeSource属性。
728 0