前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android MVVM开发模式(二)

android MVVM开发模式(二)

作者头像
用户1263308
发布2018-02-01 18:51:13
5810
发布2018-02-01 18:51:13
举报
文章被收录于专栏:代码GG之家代码GG之家

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

简介

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

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

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

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

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

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-07-24,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 代码GG之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 1让User继承BaseObservable
  • 2使用@Bindable注释
  • 3通知数据改变
  • 4实践
  • 5 代码地址
  • 6后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com