黑马程序员技术交流社区

标题: 揭秘Android 6.0 之 Data Binding Guide(数据绑定指南) [打印本页]

作者: 柳柳桑    时间: 2015-11-24 08:37
标题: 揭秘Android 6.0 之 Data Binding Guide(数据绑定指南)

揭秘Android 6.0 之 Data Binding Guide(数据绑定指南)

         前言:Data Binding解决了 Android UI 编程中的一个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。其实在此之前,已经有些第三方的框架(RoboAndroid)可以支持 MVVM 模型,无奈由于框架的侵入性太强,导致一直没有流行起来。

  1、准备:
  AndroidStudio 更新到1.3或者更高
  2、注意:
  DataBinding 是一个 support 包
  3、新建一个Project
  >>修改ProjectBuild.gradle,为 buildscript 添加一条依赖。
    classpath "com.android.databinding:dataBinder:1.0-rc1"
  >>为用到 Data Binding 的模块添加插件,修改对应的 build.gradle
    applyplugin: 'com.android.databinding'
  工程创建完成后,我们通过一个最简单的例子来说明 Data Binding 的基本用法。

一、布局文件
  使用 Data Binding 之后,xml的布局文件就不再单纯地展示UI 元素。所以,它的根节点不再是一个 ViewGroup,而是变成了 layout,并且新增了一个节点 data,如例1-1所示:
例1-1
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android">

  3.     <data>
  4.         <import type="com.example.siyan.sample.Person" />
  5.         <variable
  6.             name="user"
  7.             type="Person" />
  8.     </data>

  9.     <LinearLayout
  10.         android:layout_width="match_parent"
  11.         android:layout_height="match_parent"
  12.         android:orientation="vertical">
  13.         <TextView
  14.             android:layout_width="wrap_content"
  15.             android:layout_height="wrap_content"
  16.             android:text="@{user.name}"
  17.             android:textSize="20sp" />
  18.     </LinearLayout>
  19. </layout>
复制代码
  在Layout中data节点,声明一个variablea子节点,然后就可以在Layout中使用了。Type属性可以是JavaBean、POJO(实际就是Java类),注意:Type应该是全路径。name属性为这个类的引用起的一个别名。如例1-2:
1-2
  1. <data>
  2.     <variable
  3.         name="user"
  4.         type="com.example.siyan.sample.Person" />
  5. </data>
复制代码
  当然,还可以使用下面这一种写法。如例1-3:
1-3
  1. <data>
  2.     <import type="com.example.siyan.sample.Person" />
  3.     <variable
  4.         name="user"
  5.         type="Person" />
  6. </data>
复制代码
  布局里面使用表达式"@{}"设置object的value。如例1-4:
1-4
  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:text="@{user.name}" />
复制代码
  数据对象POJO。如例1-5:
1-5
  1. public class Person {
  2. public final String name;
  3. public Person(String name) {
  4. this.name = name;
  5.     }
  6. public String getName() {
  7. return name;
  8.     }
  9. }
复制代码

二、绑定数据
用DatabindingUtil.setContentView() 来替换掉 setContentView(),然后创建一个 user 对象,通过 binding.setUser(user) 与 variable 进行绑定如例2-1:
2-1
  1. <font size="3">protected void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. //注意AMainBinding 是根据布局名字怎么生成的
  4. AMainBinding dataBinding = DataBindingUtil.setContentView(this, R.layout.a_main);
  5.     Person p = new Person("传智播客");
  6.     dataBinding.setUser(p);
  7. }</font>
复制代码
  AMainBinding类是自动生成的,所有的set 方法也是根据 variable节点的name属性生成的。
  至此,一个简单的数据绑定就完成了。运行上述程序,效果如图所示:


作者: Camwly    时间: 2015-11-24 09:07
学习了,谢谢
作者: 耀阳圣尊    时间: 2015-11-24 09:35
赞一个
作者: 欧欧拐    时间: 2015-11-24 12:37

作者: a784161433    时间: 2015-11-24 21:20
太深奥了,完全看不懂啊
作者: 听你说    时间: 2015-11-24 21:53
看着还6啊,点个赞
作者: 学习黑马精神    时间: 2015-11-24 22:26
厉害!   这么快出帖子了!
作者: 夜空的星    时间: 2015-11-24 23:08
真好啊,你真美啊
作者: ppaapc    时间: 2015-11-24 23:15
好顶赞!!
作者: hongguihao    时间: 2015-11-24 23:37
来打个酱油
作者: 她呆萌可爱    时间: 2015-11-25 00:17
虽然不知道再说什么
作者: cbl16888    时间: 2015-11-25 07:14
安卓的实力不可小嘘啊
作者: 董棁    时间: 2015-11-25 08:03
赞一个~~~~~
作者: 王广彬    时间: 2015-11-25 10:22
学习了,数据绑定之后应该少费好多事
作者: 创出一片辉煌    时间: 2015-11-25 16:06
不知道这个数据绑定是双向绑定还是单向的呢?
作者: 长刀研    时间: 2015-11-25 21:43
赞一个.
作者: yaoyeqing    时间: 2015-11-25 23:17
赞赞赞赞
作者: cm181363682    时间: 2015-11-26 18:36
没上就业班还看不懂...希望早点上就业班吧~~
作者: langjun    时间: 2015-11-26 19:42
没有上就业班就看不懂!
作者: fandy568    时间: 2015-11-26 19:58
希望android能越走越远   fighting
作者: 野生小屌丝    时间: 2015-11-26 23:46
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: 会走路的二百块    时间: 2015-11-27 08:57
上完安卓就业班应该就能看懂了
作者: 陈同英    时间: 2015-11-27 19:27
很好.................
作者: 超级宝贝乐爷    时间: 2015-11-27 19:54
6.0不错哦 直接拿取了!!!!!!!!!!!!!!!!!!!!!!!!
作者: 664631215    时间: 2015-11-28 08:52
路过也是有惊喜的
作者: 天橙星    时间: 2015-11-28 22:43
顶一个,虽然不明但是觉厉
作者: 草上飞f    时间: 2015-11-29 00:01
大赞!!!!!
作者: smile不夜    时间: 2015-11-30 21:20
安卓6.0好厉害的样子啊
作者: YuePr    时间: 2015-12-1 22:36
美女还技术这么牛!真真的是服了1
作者: heimawangzi    时间: 2015-12-2 17:02
{:3_47:}{:3_46:}
作者: 草上飞f    时间: 2015-12-3 09:13
好帖!!!!
作者: 667784    时间: 2015-12-3 09:59
不错不错,赞一个~~~~~
作者: 667784    时间: 2015-12-4 16:35
Nothimg is impossible
作者: 大漠孤星    时间: 2015-12-4 19:57
不错哦!----------------------32个赞。
作者: autumnforest    时间: 2015-12-4 22:08
欧欧拐 发表于 2015-11-24 12:37

give a good poinggive a good poinggive a good poinggive a good poing
作者: chenxunlei    时间: 2015-12-4 22:09
赞赞赞赞赞赞
作者: 草上飞f    时间: 2015-12-4 22:44
大赞!!!!!
作者: 草上飞f    时间: 2015-12-5 23:53
顶!!!!
作者: 草上飞f    时间: 2015-12-6 00:15
给力!!!!
作者: fuyao1992    时间: 2015-12-7 21:39
精彩的学习经历,点个赞。
作者: fuyao1992    时间: 2015-12-7 21:44
精彩的学习经历,点个赞。
作者: fuyao1992    时间: 2015-12-7 21:59
精彩的学习经历,点个赞。
作者: fuyao1992    时间: 2015-12-7 22:04
精彩的学习经历,点个赞。
作者: lizhaoyu612    时间: 2015-12-7 23:14
看不懂。。。。。
作者: Star_FDt78    时间: 2015-12-7 23:53
黑马是我们的云梯,通天的云梯
作者: 回归原点521    时间: 2015-12-8 00:21
太深奥了,完全看不懂啊
作者: yubail    时间: 2015-12-8 07:44
谢谢分享
作者: yangle123456    时间: 2015-12-8 13:24
学习了,好东西,谢谢
作者: @别闹    时间: 2015-12-8 21:26
真心看不懂,但是我相信我一定有会看懂的时候,加油!
作者: 凤华茂此时    时间: 2015-12-8 22:13
就业班呀就业班,真让人渴望
作者: chenxunlei    时间: 2015-12-9 19:24
赞赞赞赞赞
作者: 孤独成瘾    时间: 2015-12-9 22:14
不错啊

作者: liuzhipeng    时间: 2015-12-10 22:50
柳柳怎么这么有才呢
作者: 段江波    时间: 2015-12-11 22:20
必须的赞一个
作者: 李同学    时间: 2015-12-15 21:09
是真的看不懂啊
作者: dsqhhzz    时间: 2015-12-15 21:33
66666666666666666
作者: 越狱犯    时间: 2015-12-15 22:12
好厉害,学到了
作者: ChinaTuring    时间: 2015-12-15 22:24
学习了  虽然还不懂
作者: 凤华茂此时    时间: 2015-12-15 22:27
安卓,学了java再来找你
作者: ROSSIN    时间: 2015-12-16 00:05
已收藏!
作者: AndroidWhite    时间: 2015-12-16 00:21
学到了  还不错哦
作者: Mr.zhao    时间: 2015-12-16 01:02
完全没到可以看懂的水平

作者: AndroidWhite    时间: 2015-12-18 22:02
努力奋斗中!!!!1

作者: d623234436    时间: 2015-12-24 22:41
大大的赞一个
作者: 凤华茂此时    时间: 2015-12-24 23:25
赞一个,一起加油
作者: houbofly    时间: 2015-12-28 22:23
赞一个,厉害
作者: 韦丹艳58    时间: 2016-1-12 22:27
有用哦!!!!!!!!!
作者: tangshenshen    时间: 2016-3-13 23:16
大赞~~~~~~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2