Data Binding 实践

 

不止是技术分享,更讲述了我们团队「鸡汤哥」的故事!...



这是我司同事的一篇文章,我觉得写得很不错,推荐给大家。在分享他的文章之前且听我说两件关于他的故事,绝对都是真人真事:

1. 有一次上班的下午,大家都在coding的coding,干活的干活,突然我们薄荷的大群里冒出来他发的这么一句话:「姜汤煮了么?」,卧槽,我看到这条消息当时笑死了,猜测应该是发给他媳妇的,然后转过头问他果然是,他虽然也在笑但估计心里紧张死了,这被老板知道上班时间跟老婆聊qq了,虽然我们也都这样干,但是毕竟让老板知道不太好,所以我刚准备帮他刷下屏呢,谁知道大群里冒出来老板的一句话:「鸡汤也煮了么?」,为了缓解气氛我也回了个「鱼汤也煮了么?」,然后就看到下面一堆人的接龙:「鸭汤也煮了么?」、「排骨汤也煮了么?」、「参汤也煮了么?」...从此整个公司都认识了一直默默在角落里coding的他,人送外号「鸡汤哥」!

2. 前一阵子他老婆怀孕了,回老家休养去了。第二天早上9:30的样子我到公司没看到他身影,我们公司是弹性工作制,10点之前能到就ok的,但是一般他都是9点左右就到了,今天竟然这么晚我一开始觉得有点不适应。想到昨晚有欧冠联赛,他是个足球迷,估计看比赛看到很晚。就这样到了10点竟然还没来公司,而且没有跟我发qq,没有给我打电话。我觉得有点奇怪,就主动打电话给他,谁知道没人接,就这样连续打了5、6个电话一直没人接。想着即使是睡过了也不会睡这么死吧,我仔细一想,「鸡汤哥」来公司2年多的时间,期间做事很靠谱,印象中从没有迟到过,有要请假的都是提前就给我打电话请假,交给他做的事我从来没担心过,今天怎么这么奇怪。就这样我自己以及其他同事加一起打了将近有几十个电话都没人接,于是查看昨晚他的打卡记录,竟然10点多才走,平时都是7、8点就走了的,想到问问他老婆吧,就用了他的测试机登了他的qq账号,谁知道他老婆从昨晚11点就开始找他,一早也给他发了qq没人回,这下可真吓坏了,种种迹象表明太奇怪了,有点担心,于是问他媳妇要了他住的地址,跟着一位同事赶紧打了车赶到他家里,就这样一路开到他家,刚到他楼下,就接到他的电话,说「睡的太死了,一觉醒来竟然11点了...」,卧槽,简直惊呆了,我猜肯定是媳妇在家压抑太久,昨天刚走,估计就看欧冠看到很晚,虽说有点生气,但是好在没啥事发生,为了这事害的整个Android团队都是心惊胆战的,不过当晚整个Android团队就借机狠狠的「宰」了他一顿,当天我还发了朋友圈晒了我们团队喝酒的照片呢。这件事告诉我们:平时不要太靠谱,偶尔迟到一次是好事,对于从没迟到过的人只要有一次迟到别人就会觉得奇怪!

我们技术团队的博客每周必更新一篇,所以大家可以持续关注下他的博客,很多内容都还是很不错的,都是他在薄荷的亲自实践与总结,他是从毕业不久加入薄荷一直跟着我,到现在亲自负责一块业务,我是亲眼见证了他的成长。

微信不支持外链,大家可以点击「阅读原文」跳转到他的博客,记得不妨留下「鸡汤哥威武」几个字代表你来过!

Data Binding Library

去年的Google IO 大会上,Android 团队发布了一个数据绑定框架(Data Binding Library)。以后可以直接在 layout 布局 xml 文件中绑定数据了,无需再 findViewById 然后手工设置数据了。其语法和使用方式和 JSP 中的 EL 表达式非常类似。由于那时还只是测试版,而且

Android Studio还没有很好的支持,就没有怎么实践,前段时间Android Studio发布了2.0正式版,而且已经内置了该框架的支持,配置起来也很简单

配置

在主目录的build.gradle中如下配置即可



Layout文件跟之前有很大的不同,我们先看看原来的布局文件 activity_main.xml





下面是Data Binding的 activity_main.xml





我们看到Data Binding layout文件有点不同的是:起始根标签是layout,接下来一个data元素以及一个view的根元素。这个view元素就是你没有使用Data Binding的layout文件的根元素.

我们定义的一个User类



Binding数据

在MainActivity中添加如下代码



这里的ActivityMainBinding是根据布局文件activity_main的名称生成的。布局文件和绑定的数据一定要写对,否则无法生成Binging文件

这样我们程序就可以将User的信息显示出来了,如下图:

其中布局文件还有还有两个节点

import:等价于java文件中的import导包

variable:申明变量 每一个variable元素描述了一个用于layout文件中Binding表达式的属性。

同样Data Binding的layout也是支持include、ViewStub的,具体使用方法在这里不多说

Observable Binding

通过Data Binding,我们已经把对象的属性绑定到UI上了,有的时候,代码会修改我们绑定的对象的某些属性,那么怎么通知界面刷新呢?这就要用到Observable Binding了,它有两种方式

1. 让你的绑定数据类继承BaseObservable,然后通过调用notifyPropertyChanged方法来通知界面属性改变,如下:



在需要通知的属性的get方法上加上@Bindable,这样编译阶段会生成BR.[property name],然后使用这个调用方法notifyPropertyChanged就可以通知界面刷新了

2. Data Binding Library提供了很便利的类ObservableField,还有ObservableBoolean, ObservableByte, ObservableChar, ObservableShort, ObservableInt, ObservableLong, ObservableFloat, ObservableDouble, 和 ObservableParcelable,基本上涵盖了各种我们需要的类型



然后使用下面的代码来访问:



调用set方法时,Data Binding Library就会自动的帮我们通知界面刷新了。

MVVM

以上就是关于Data Binding的一些基础实践,并没有多么复杂,关键是它要传达的一种思想即View的变化可以自动的反应在ViewModel,ViewModel的数据变化也会自动反应到View上,这种思想也就是我们常常提到的 MVVM 设计模式,最后借用一张图来介绍下MVVM



参考

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

Data Binding(数据绑定)用户指南

http://gold.xitu.io/entry/56781baf00b01b78ac54c10a


    关注 AndroidDeveloper


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册