Android DataBinding库(MVVM设计模式)

本文详细介绍了Android DataBinding库及其在MVVM设计模式中的应用。内容涵盖DataBinding的环境要求、工作原理、基本用法,以及在实际项目中的实践,包括数据绑定、表达式操作、事件处理和列表展示等。同时,文章提到了使用DataBinding时的注意事项和可能出现的问题,为读者提供了丰富的学习资源。
摘要由CSDN通过智能技术生成


本篇来自 带心情去旅行 的投稿。正所谓鱼与熊掌不可兼得,本文详尽分析的同时也伴随着略长的篇幅,但是我相信大家一定可以有耐心地读下去,因为内容由浅入深,环环相扣,十分充实。


带心情去旅行 的博客地址:

http://www.jianshu.com/users/769d3d3a9d4b


什么是MVVM


说到 DataBinding,就有必要先提起 MVVM设计模式


Model–View–ViewModel(MVVM) 是一个软件架构设计模式,相比 MVVM,大家对 MVC MVP 可能会更加熟悉。


  • MVC:(VIew-Model-Controller)

    早期将 View、Model、Controller 代码块进行划分,使得程序大部分分离,降低耦合。


  • MVP:(VIew-Model-Presenter)

    由于 MVC View和Model之间的依赖太强,导致 Activity 中的代码过于臃肿。为了他们可以绝对独立的存在,慢慢演化出了 MVP。在 MVP View 并不直接使用 Model,它们之间的通信是通过 Presenter (MVC中的Controller) 来进行的。


  • MVVM:(Model–View–ViewModel)

    MVVM 可以算是 MVP的升级版,将 Presenter 改名为 ViewModel。关键在于 View和Model的双向绑定,当 View 有用户输入后,ViewModel 通知 Model 更新数据,同理 Model 数据更新后,ViewModel 通知 View 更新。


Data Binding


在Google I/O 2015上,伴随着 Android M 预览版发布了Data Binding兼容函数库:

https://developer.android.com/tools/data-binding/guide.html


不知道要扯什么了,还是直接上代码,来看看 Data Binding 的魅力吧。


环境要求


Data Binding 对使用的环境还是有一定要求的(这货有点挑):


  • Android Studio 版本在 1.3以上

  • Gradle 的版本要在 1.5.0-alpha1 以上

  • 需要在 Android SDK manager 中下载 Android Support repository


然后在对应的 Module build.gradle 中添加:


android {
       
   ....    dataBinding {        enabled =true    } }


Gradle需要升级版本的可以参考:


升级Gradle版本

http://www.jianshu.com/p/00beddbe3dbc


创建对象


创建一个 User类




布局


activity_main.xml 中布局:




这里跟平时的布局有点不同,最外层是 layout,里面分别是 data 以及 我们的布局。


data:声明了需要用到的 user对象type 用于指定路径。


可以在 TextView 中的看到 android:text="@{user.firstName}", 这是什么鬼,没见过这么写的!!!(不急,继续往下看)


绑定数据


看看下面的 MainActivity




问我 ActivityMainBinding 哪来的?我怎么知道...


ActivityMainBinding 是根据布局文件的名字生成的,在后面加了 Binding


运行下看看效果吧:




有点懵逼了,就绑定了下而已,这些数据是怎么显示到界面上的。




他是怎么工作的?


原来 Data Binding 在程序代码正在编译的时候,找到所有它需要的信息。然后通过语法来解析这些表达式,最后生成一个类。


通过反编译我们可以看到,反编译可以参考这里:

http://blog.csdn.net/vipzjyno1/article/details/21039349


Data Binding 为我们生成了 databinding,以及 ActivityMainBinding类




看看我们在 onCreate 中最后调用的 binding.setUser(user),在 ActivityMainBinding 中可以看到这个方法:




我想就是这个 super.requestRebind() 对数据进行了绑定,至于里面怎么实现的,有待进一步研究。


更多用法


上面只是用一个简单的例子,展示了 Data Binding 的用法,如果想在实际项目中使用,可不是上面这例子可以搞定的。下面就来说说 Data Bindig 的更多用法。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值