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下一页
您需要登录后才可以回帖 登录 | 加入黑马