android MVVM开发模式(五)

android MVVM开发模式(五)

上一讲我们说了@InverseBindingAdapter标记的事情。通过这个,我们可以实现view向数据方向的传递。从而实现真正的双向绑定。

已经讲了这么多,核心的知识点基本完成,要每个细节去说,估计十几节讲不完了,因此我们再来看下一个核心内容,结束本系列教程。如果使用中有任何疑问,欢迎沟通交流。

我们前面讲过,@BindingAdapter 实现的函数必须是静态的。那它不能是非静态的吗?答案是可以的。

这个需求的出现是因为 我们有时会想在两种情况下,一个属性出现两种表现逻辑代码,这个主要的需求便是 正常流程 和测试模式,测试下可以模拟一条线路,不必走我们正常流程下的数据,可以直接提供测试数据,来测试代码。

当然,如果我们使用一个属性,来改变界面颜色搭配。那么实现两个同一属性的方法,配置不同的颜色,通过设置使用哪个代码,可以达到换肤的效果啦。

我们看下怎么操作的。

移除掉User里面的@BindingAdapter @InverseBindingAdapter 的方法,原因是我们要给这个属性使用两组实现。

1 实现一个抽象类。

  • 这里有个问题,本来按照我们的理解,@InverseBindingAdapter注解的函数方法,应该也是可以非静态的(我们想使用测试时候反馈和正常反馈有些差异,然而当前data-binding不允许这个为非静态~~~~。这个我看了生成代码,是完全可以做到为非静态的,所以不解为什么系统当前不支持。)
  • 我们定义了两个抽象的属性适配,没有实现代码。

2 我们实现它

  • 这里继承它,实现两个抽象方法。

3 实现DataBindingComponent接口

  • 在我们做了上面的动作,具体指的是@BindingAdapter实现的方法是非静态的时候,那么我们肯定需要一个对应实例的吧。因此data-binding帮你将你需要写的方法生成了一个接口,让你去实现它就行了。(很智能化吧。)
  • 我们实现它,返回一个适配器就可以了。在这里我们就可以清晰地看到,这个返回的我们可以定制的。如果我们多个继承了BaseAdapter类,比如 OptionAdapter 和OptionAdapter2 ,我们这里可以再写一个组件,返回OptionAdapter2,在我们的代码里面依据情况使用不同的组件。

4 使用它

  • 这里关键点,最后一个参数。将我们的组件实例传递给它。这样子生成的绑定里面,才能依据这个找到真正实现属性对应方法的实例,然后调用。
  • 我们可以看到绑定的实现里面,做了这个动作。
  • mBindingComponent 是我们传递进来的,这里使用它的getBaseAdapter后再调用方法了。 所以我们通过传递不同的BindingComponent ,来实现同一属性多个实现方法了。

5 代码地址

https://github.com/luxiaoming/MVVMDemo

原文发布于微信公众号 - 代码GG之家(code_gg_home)

原文发表时间:2016-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏韩伟的专栏

JAVA和C++对比学习

JAVA与C++的比较网上有很多讨论。比较清晰完整的有: http://zh.wikipedia.org/wiki/%E6%AF%94%E8%BE%83Java...

3894
来自专栏零基础使用Django2.0.1打造在线教育网站

关于JAVA你必须知道的那些事(一):概述

第一次写文章,有点小紧张,不过没关系,因为我面对的都是小白。好了废话少说,直接开始吧。

892
来自专栏V站

PHP复杂变量绕过addslashes()直接拿shell

访问链接如下: http://www.test.com/ctf.php?str=${phpinfo()}

1.5K3
来自专栏Java学习网

java开发中代码级别的优化方法总结,有效提高程序性能

负载测试和应用程序监控对于确定应用程序的一些关键性能瓶颈非常有用。但同时,我们需要遵循良好的编码习惯,以避免在对应用程序进行监控的时候出现过多的性能问题。

1692
来自专栏互联网杂技

堆,栈,内存泄露,内存溢出介绍

简单的可以理解为: heap(堆):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack(栈):是自动分配变量,以及函数调用的时候所使用...

4424
来自专栏程序员互动联盟

【答疑释惑】C++ cin的问题

Java中的高精度数字语音版 --------------------------------------------------------------- ...

3596
来自专栏猿人谷

volatile

   当一个对象的值可能会在编译器的控制或监测之外被改变时,例如一个被系统时钟更新的变量,那么该对象应该声明成volatile。因此编译器执行的某些例行优化行为...

2137
来自专栏Golang语言社区

Node.js新手必须知道的4个JavaScript概念

如果只需要知道一种编程语言就可以构建一个全栈的应用程序,是不是特别了不起?Ryan Dahl为了把这个想法成为现实,创造了node.js。Node.js是建立在...

3014
来自专栏宋凯伦的技术小栈

分享调用Java private方法

上周在修复bug时,发现Java类中某方法是private,且类中没有用到,第一感觉是方法多余。其实通过分析,发现原来Native Code会通过JNI调到此方...

2245
来自专栏牛客网

美团榛果民宿面经

1684

扫码关注云+社区

领取腾讯云代金券