android MVVM开发模式(二)

举手之劳,帮忙分享出去,让更多热爱编程的人加入进来。

简介

之前讲了那么多,主要围绕着这个核心概念:绑定

不过相对来说,我们上节讲的其实只是它的一个知识点:解决布局文件的生成和界面的绑定。数据是我们主动给到绑定类的,这个肯定不是我们的目标。主动给到绑定的动作应该只是第一次作为初始值给出,随后则需要数据直接改变,自动反馈到界面上。

所以,我们这节就来解决这个问题。

还是老样子,先看如何使用它:

1让User继承BaseObservable

  • BaseObservable叫可观测,也可以简单的理解成我们常说的callback回调函数,就像点击一个button注册的onclick一样,一点击,就调用回调函数。
  • BaseObservable是个有通知机制,我们可以借助这个来完成数据改变的反馈。

2使用@Bindable注释

  • @Bindable注释的目的是使得编译机制知道,这个类里面有个数据是需要通知的,因此它会生成通知和被通知的关系链。
  • 这样说肯定会晕,因此我们说下这里的name,我们记得我们的xml里面写过
  • 意思就是文本是需要这个name的值来显示的。我们给User的String name加上这个注释@Bindable,就是告诉编译器你给我把这两个关联起来。(这里的关联指的是在初始化设置User的时候,

将自己(ActivityMainBinding)作为User的回调,这样子我们有变化则可以给通知了)

3通知数据改变

  • 在我们的User里面,写上
    • 关键技术点:notifyPropertyChanged(BR.name);
    • 通知属性改变了,这里BR类是编译生成的,主要就是@Bindable标记的属性,生成这个的目的就是为了我们去通知数据变化时候使用。

4实践

  • 这里和上一节讲的区别在哪呢?我们看到先设置User,然后才给name赋值的,设置User过后,这时候再去设置name,然后通过notifyPropertyChanged通知数据改变,而上一节说过,ActivityMainBinding的目的就是将数据和view绑定起来,因此现在我们数据变化了,主动通知我们的绑定模块(ActivityMainBinding),从而实现数据变化直接反馈到界面了。这样子我们只需要关注数据的变化即可了。

5 代码地址

https://github.com/luxiaoming/MVVMDemo

6后记

  • 说了mvvm的开发模式思路,我们发现它的优势是将mvp中的v-p关系简化,但是它的做法是将这个动作做到了xml里面去了,这时就看你的取舍了。喜欢写入xml,就用这个思路,其实实际中mvvm有个和mvp的折中思路,就是mvp是v-p关系太过紧密,mvvm的缺点是没有了Presenter,使得vm(ViewModel做了很多Presenter的事情)太重,因此有人就搞出来两个的优点合并,在mvp的基础上,使用ViewModel,两个混合着用,可以达到 两者的优点共存,google官方例子也是如此推荐使用的。
  • 常用的开发模式 mvp+dagger2 或者就是mvvm+dagger2。

更多细节,可以看官网原文:

https://developer.android.com/topic/libraries/data-binding/index.html

简书中文翻译:

http://www.jianshu.com/p/b1df61a4df77

完全demo:

https://github.com/LyndonChin/MasteringAndroidDataBinding

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

《WCF技术剖析》博文系列汇总[持续更新中]

近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析(卷1)》的写作,一直无暇管理自己的Blog。在《WCF技术剖析(卷1)》写作期间,对WCF又有了新的感...

1768
来自专栏酷玩时刻

微信公众号开发之模板消息

其实这个问题很简单,在【微信公众平台】现在已经可以直接查看自己的公众号都能使用那些接口。

3223
来自专栏Linyb极客之路

面对海量请求,缓存设计还应该考虑哪些问题?

从第一个缓存框架 Memcached 诞生以来,缓存就广泛地存在于互联网应用中。如果你的应用流量很小,那么使用缓存可能并不需要做多余的考虑。但如果你的应用流量达...

964
来自专栏Java后端技术栈

Java分布式开发不得不知的Dubbo技术详细介绍

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

1233
来自专栏Golang语言社区

进程、线程、轻量级进程、协程和go中的Goroutine

进程、线程、轻量级进程、协程和go中的Goroutine 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟...

4616
来自专栏达摩兵的技术空间

vue项目实践003

通过本问将看到我在vue的项目中,进行的一系列的项目优化,然后看到不同的维度将这些点进行分类。

1392
来自专栏Java架构

深入理解Java虚拟机到底是什么什么是Java虚拟机从进程的角度解释JVM

1865
来自专栏编程

花5分钟教会你用python搭建出一个动态网页,零基础也能学得会

本套录屏教程,是为初学者准备的,确保非计算机专业的也能跟着一步一步玩转python,既培养出兴趣,又玩出点东西。 上一讲介绍了我们如何用python发布一个静态...

2247
来自专栏JAVA高级架构

深入理解Java虚拟机到底是什么

什么是Java虚拟机 作为一个Java程序员,我们每天都在写Java代码,我们写的代码都是在一个叫做Java虚拟机的东西上执行的。但是如果要问什么是虚拟机,恐怕...

3117
来自专栏微服务

C#并发编程实例讲解-概述(01)

在工作中经常遇到需要并发编程的实例,一直没有时间来整理,现在空了下来,个人整理对并发一下理解。 关于并发编程的几个误解 误解一:并发编程就是多线程 实际上多线...

29310

扫码关注云+社区

领取腾讯云代金券