DataBinding深入实战(一)-@BindingAdapter天马行空的binding

这2天正在编辑和整理之前的项目,稍后会把完整的binding例子工程整理好放到github上去。

本系列不是databinding的基础使用讲解,基础使用看官方文档就够了,这里是对于官方提供的所有基础功能挖掘,怎么样的能够利用它简化开发工作,发挥天马行空的想象力,同时也是抛砖引玉,启发大家发掘出各种用法。

Google官方的Databinding已经推出很久了,但是国内使用者其实还不多,有很大一部分原因是大家搜索到的教程,其实只是各个功能点最基础的应用,有些同学浅尝辄止的看过后会觉得:”其实没有方便多少嘛“。实际上,这个库目前来看,绝对不应该被看成是一个包装完全了的傻瓜式使用库,而应该把它看成是一个原材料,它提供给你了无限的可能,你要基于它各种强大的基础功能,发挥你的想象力才可能发现它的好用之处。

本篇介绍的是其中的一个知识点,由浅入深介绍几个在自己工程实践中突发奇想的一些用法。

一. @BindingAdapter 介绍

我们在xml中会给view添加各种属性,比如 textSize = xxx。databinding库为我们提供了一种方法,就是扩展view控件的xml属性,而且使用起来非常简单,就是在你的项目里写一个类,然后根据每一个属性写一个方法,使用@BindingAdapter告诉databinding框架这个方法就是用来自定义属性的。

1。简单应用,view动态控制:

自定义属性

如上图,我们写了一个方法,public static void imageSrc(ImageView view, int resId) 用这个方法来给ImageView控件添加一个xml属性:imageSrc(通过注解@BindingAdapter来指定这个属性在xml里应该叫什么)。 这样在xml里我们就可以利用这个属性来给imageView来添加图片。

xml中使用方式如下:

我们来看imageView的最后一行, android:imageSrc="@{menuBean.src()}" 就是我们上面自定义的方法。这个menuBean 是我们在当前xml页面绑定的一个数据对象。这样一来,我们就可以调用这个对象的一个方法:src() 来给iageView指定图片。

如果你要问,这样做的意义何在?imageView自己就有设置图片的方法啊。

我们考虑如下情况,一个imageView,图片不是固定的,比如根据用户级别来显示不同图片。这样一来,我们自定义这个属性就派上用场了,从服务端获取到用户数据后,我们在menuBean内部就可以计算判断出当前应该显示的图片是什么,并且赋值给这个成员变量。这样进入页面的时imageview就会显示我们想要的图片。

而我们不在需要代码中写mageView的resource控制,而通常要控制一个view,我们都需要在activity都代码中来写,这就意味这这段代码既要引用到view,又要引用到数据data对象,不符合代码低耦合的观点。而用这种方式以后,data对象里不需要知道view的存在,activity里也不需要去代码让这2者关联,而是成功的转到了xml中的一条属性。

src方法如下:

类似的可以有很多场景,比如网络图片的url,文字背景色切换等等。发挥你的想象力,把代码中view和data关联的逻辑代码解放出来把。


2.创造属性实现多个view之间的观察者模式

现在大家都开始喜欢响应式编程,基于java内置都观察者api,我们平时也可以转变思维来多用响应式。

例子:比如一个editText,有需求这个edittext获取焦点,正在编辑都时候,页面上其他的一些view要跟着有变化。最直接的做法就是我们在代码里写editText的监听事件,然后在找到各个需要处理的view,去代码控制他们改变。而通常这一战场又出现在activity里,只有这里才是view 门的聚会场所···。

现在我们改变下思路,不去主动的控制这些view,而让这些view去响应改变,EditText作为obervable被观察,需要响应改变的views作为observer,当观察到editText在编辑状态时,则作出自己的响应。

举例:

(1)自定义类继承EditText,在获取焦点时候,像其他的view发出消息通知。

(2) 自定义响应的view 实现Observer接口,文中以textView举例:update方法会自动响应observable对象发出的消息。

(3)用@BindingAdapter创建方法将二者联系起来。

如上,我们可以对这个自定义的EditText扩展一个xml属性:observer,像其注册观察者。这样我们就可以把2者的链接互动通过一条xml属性就完成,而不需要在去写任何的代码:

就是这样,我们只要一个xml属性,就像这个editText注册了一个TextView作为观察者,当edit被编辑时候,这个textView会自动进入selected状态。


3.自定义属性接管listview adapter创建,从此不再写adapter

---未完待续---

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,268评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,672评论 2 59
  • 先吐槽下,不说不爽,不说不通达 不吐不快,集合我这几天学习 DataBinding 的经历说几句。DataBind...
    前行的乌龟阅读 21,219评论 13 46
  • 目录 一、MVVM和dataBinding介绍 二、初步使用 三、其他使用1. 事件处理2.viewstub和in...
    下位子阅读 4,403评论 6 19
  • 我们把样本分成三个部分,分别是训练集、验证集和测试集。这里说的学习曲线主要是训练平方误差和验证平方误差曲线,通过观...
    快乐的小飞熊阅读 1,201评论 0 0