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


揭秘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 个回复

正序浏览
大赞~~~~~~~~~~
回复 使用道具 举报
有用哦!!!!!!!!!
回复 使用道具 举报
赞一个,厉害
回复 使用道具 举报
赞一个,一起加油
回复 使用道具 举报
大大的赞一个
回复 使用道具 举报
努力奋斗中!!!!1
回复 使用道具 举报
完全没到可以看懂的水平
回复 使用道具 举报
学到了  还不错哦
回复 使用道具 举报
ROSSIN 中级黑马 2015-12-16 00:05:58
60#
已收藏!
回复 使用道具 举报
安卓,学了java再来找你
回复 使用道具 举报
学习了  虽然还不懂
回复 使用道具 举报
越狱犯 来自手机 中级黑马 2015-12-15 22:12:49
57#
好厉害,学到了
回复 使用道具 举报
66666666666666666
回复 使用道具 举报
是真的看不懂啊
回复 使用道具 举报
必须的赞一个
回复 使用道具 举报
柳柳怎么这么有才呢
回复 使用道具 举报
不错啊
回复 使用道具 举报
赞赞赞赞赞
回复 使用道具 举报
就业班呀就业班,真让人渴望
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马