A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


揭秘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属性生成的。
  至此,一个简单的数据绑定就完成了。运行上述程序,效果如图所示:

67 个回复

倒序浏览
学习了,谢谢
回复 使用道具 举报
赞一个
回复 使用道具 举报
回复 使用道具 举报
太深奥了,完全看不懂啊
回复 使用道具 举报
看着还6啊,点个赞
回复 使用道具 举报
厉害!   这么快出帖子了!
回复 使用道具 举报
真好啊,你真美啊
回复 使用道具 举报
ppaapc 中级黑马 2015-11-24 23:15:39
9#
好顶赞!!
回复 使用道具 举报
来打个酱油
回复 使用道具 举报
虽然不知道再说什么
回复 使用道具 举报
安卓的实力不可小嘘啊
回复 使用道具 举报
董棁 中级黑马 2015-11-25 08:03:33
13#
赞一个~~~~~
回复 使用道具 举报
学习了,数据绑定之后应该少费好多事
回复 使用道具 举报
不知道这个数据绑定是双向绑定还是单向的呢?
回复 使用道具 举报
赞一个.
回复 使用道具 举报
赞赞赞赞
回复 使用道具 举报
没上就业班还看不懂...希望早点上就业班吧~~
回复 使用道具 举报
没有上就业班就看不懂!
回复 使用道具 举报
希望android能越走越远   fighting
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马