专栏首页代码GG之家android MVVM开发模式(五)

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),作者:陆晓明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SDL系列讲解(三) 工具安装

    下一节在开讲前,会做一次答疑,将为什么选择SDL,SDL的一些疑问讲一下。 准备环境 在我们阅读代码之前,我们准备以下一些常见工具。 Notep...

    用户1263308
  • google 分屏 popup无法显示故障分析

    问题描述 [Message][Input method]Display is wrong when message at split mode. 分屏模式下短信...

    用户1263308
  • google 进入分屏后在横屏模式按home键界面错乱( 四)

    google 进入分屏后在横屏模式按home键界面错乱( 四) 你确定你了解分屏的整个流程? ? 代码阅读,请到此处http://androidxref.com...

    用户1263308
  • 部署NGINX Plus作为API网关(第一部分)——NGINX

    HTTP API是现代应用架构的核心。HTTP协议使开发者可以更快地构建应用并使应用的维护变得更加容易。HTTP API提供了一套通用的接口,这使得在任意的应用...

    Techeek
  • 能用强化学习买卖比特币赚钱吗?能能能,当然能!

    AI 科技评论按:人工智能热潮还没过去,电子货币和区块链的热潮又滚滚而来。以 BTC(比特币)为代表的电子货币近半年来吸引了全世界的注意力,每个人都想在这个热潮...

    AI科技评论
  • 《天涯明月刀》引擎技术和技术突破

    引言:6.14日“腾讯创新日:科技年技术盛宴”代表腾讯各个事业群技术实力的四级专家、腾讯微创新2016年度创意获奖团队欢聚一堂,一起畅谈AI、系统安全、架构设计...

    腾讯大讲堂
  • 边做算法边学go语言之LeetCode1160:拼写单词

    题目位置:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-character...

    机智的程序员小熊
  • 【机器学习】Quora机器学习Sessions:对话百度首席科学家Andrew Ng

    Writing Sessions是知识共享网站Quora推出的一个与专家交流互动的新板块,在这里你可以看到各个行业领域的专家、学者、名人等对引人注目的问题的独...

    陆勤_数据人网
  • 深度解析|用API来分析软件,是否存在恶意倾向

    我们发现有越来越多的恶意软件开始使用各种加密、封装和加壳等保护技术来对恶意代码进行混淆处理,以防止系统或程序对其进行识别。除此之外,这些技术甚至还会让研究人员对...

    BestSDK
  • 递归尾调用优化

    尾调用(Tail Call)是函数式编程的一个重要概念,就是指某个函数的最后一步是return调用另一个函数。

    wade

扫码关注云+社区

领取腾讯云代金券