官方介绍地址:http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html

2015 Google IO 大会带来的 Data Binding 库使得 Android 开发者可以方便的实现 MVVM 架构模式。使用DataBinding可以改善应用程序的开发,使代码更加干净优雅。何为MVVM模式,其实就是在View和Model层之间多了一层ViewModel,避免之前MVC模式中View层直接操作Model层,从而使代码结构更加清晰。有兴趣的可以看看之前转载的一篇关于关于开发模式的介绍:http://blog.csdn.net/xiangzhihong8/article/details/52671151

今天要介绍的是databining(数据绑定),对于用这个的好处和坏处我也不多说,有好处也有坏处:点击打开链接

配置环境

默认需要将Android studio升级到1.3(估计现在大部分都满足),这是因为databinding的build.gradle需要满足最低1.3(Android Studio 已经内置了对 Android Data Binding 框架的支持)。使用的时候只需要在build.gradle添加下面的脚本:

dataBinding {
        enabled = true
    }

Data Binding 是一个 support 包,添加完后,你会发现我们的External Libraries中多了四个aar包:

adapters-1.1    定义了一些DataBinding的组件
baseLibrary-2.1.3    定义了一些DataBinding的annotation和回调接口
compiler-2.1.3    定义了一些用于编译DataBinding的工具类
library-1.1     定义了一些Observable基本类型

DataBinding库改变了android传统开发流程中Layout文件的编写方式,通过ViewModel,将视图和Model绑定在一起,你只需要修改Model层的值,对应的View层就会监听到自动修改自身。(其实也就是达到了页面和数据的分离)


讲了这么多理论的东西,那么到底怎么使用DataBinding呢?

首先我们需要写一个layout,不过Data Binding layout的和传统的layout的写法不一样,起始根标签是 layout,接下来一个 data 元素以及一个 view 的根元素。这个 view 元素就是你没有使用 Data Binding的layout文件的根元素。

一般在正式写代码的顺序上我们会先定义一个viewmodel类,如下:

public class UserModel {
    private  String firstName;
    private  String lastName;
    public UserModel(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public String getFirstName() {
        return this.firstName;
    }
    public String getLastName() {
        return this.lastName;
    }
}

然后在实现一个布局(技巧就在这里面):

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.xzh.databinding.model.UserModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}" />
    </LinearLayout>
</layout>

请注意这个layout的文件名,DataBinding会根据这个layout的文件名生成一个xxBinding类,这个类继承自ViewDataBiding;如果layout文件名是content_main.xml,则会生成一个ContentMainBinding类,根据官方解释是自动把layout文件名的下滑线去掉,然后采用驼峰式的命名规则,然后再加上Binding后缀。

com.xzh.databinding会根据xml文件的名称 Generate 一个继承自 ViewDataBinding 的类。例如,这里 xml 的文件名叫 activity_main.xml,那么生成的类就是 ActivityMainBinding。

最后需要实现通过ViewModel实现View和Model的数据绑定(常常写在Activity层,如果项目比较大的话,建议将网络请求单独分层 )。

 private void getSearchData(String search) {
        binding.progressBar.setVisibility(View.VISIBLE);
        MovieHttpManager.searchMovies(search, new MovieHttpManager.IMovieResponse<List<Movie>>() {
            @Override
            public void onData(List<Movie> list) {
                MovieAdapter mAdapter = new MovieAdapter(MovieActivity.this, list);
                binding.recyclerView.setAdapter(mAdapter);
                binding.progressBar.setVisibility(View.GONE);
            }
        });
    }

这里用到的Adapter是RecyclerView.Adapter。不过虽然这种写法比较新颖,但是对于初学者还是不太容易接受。原理介绍请链接:dataBinding原理大揭秘

源码:点击打开链接

android dataBinding详解的更多相关文章

  1. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  2. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  3. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  4. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  5. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

  6. Android布局详解之一:FrameLayout

      原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...

  7. 【整理修订】Android.mk详解

    Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...

  8. Android菜单详解(四)——使用上下文菜单ContextMenu

    之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...

  9. Android签名详解(debug和release)

    Android签名详解(debug和release)   1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包 ...

随机推荐

  1. glusterfs4.0.1 mempool 分析笔记

    关于3.2.5版本分析,详见<GlusterFS之内存池(mem-pool)实现原理及代码详解> 此4.0.1版本内存池与版本3中的描述变化有点大,总的原理还是类似LINUX中的SLAB算 ...

  2. css控制file控件透明 漂浮

    css控件透明属性设置IE firefor设置方法<STYLE type=text/css>.upfilefield{position:absolute; FILTER: alpha(op ...

  3. 读书笔记-《Maven实战》-2018/4/17

    第五章 坐标和依赖 1.如同笛卡尔坐标系一样,Maven也通过坐标三元素定位一个资源. <groupId>com.dengchengchao.test</groupId> &l ...

  4. 关于在同一个DIV下的Hover效果问题

    例子: (function bindColumnRowHoverEvent(){ $('.ticket_list_body .work_product').live('mouseenter', fun ...

  5. C# TextBox 焦点

    TextBox焦点问题 1.失焦 KeyBoard.ClearFocus(); 存在一个问题,失去焦点之后,中文通过输入法依旧是可以输入的. 如果是中文文本框,按Enter失焦,同时禁止输入中文,可以 ...

  6. 使用Web Audio API绘制音波图

    摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...

  7. 聊聊jstack的工作原理

    实现一个jstack 在聊Jstack得工作原理前呢,不如让我们先写一个简单的jstack玩玩.不用怕,很简单的,就几行代码的事,看: public class MyJstack { public s ...

  8. ELK学习记录一 :初识ELK

    ELK是elastic公司提供的一套完整的收集日志并分析展示的产品,分别表示Elasticsearch.Logstash和kibana. (官网截个图) 先来一段个人粗浅的认识: Elasticsea ...

  9. Openstack: Single node Installation and External Network Accessing Configuration Guide

    Summary of installation Step 0: Prerequisites Step 1: Create Openstack hostsystem Step 2: Config Ope ...

  10. Android二维码扫描、生成

    Android二维码扫描.生成 现在使用二维码作为信息的载体已经越来越普及,那么二维码的生成以及扫描是如何实现的呢 google为我们提供了zxing开源库供我们使用 zxing GitHub源码地址 ...