JokeAndroidClient

It is android client about mvp framework. Maybe, it can help you to know how to use the mvp
这是一个基于MVP框架的应用,可以帮助初学者学习和理解MVP结构,并且还对比了使用EventBus替换回调接口的解决方案。

GitHub地址:https://github.com/robertzhang/JokeAndroidClient

开发环境

  • Android studio 1.5.1
  • JDK 1.7
  • OS X 10.11.1
  • Smartisan坚果

Project Tree

  • cn.robertzhang.joke
  • app
  • config
  • model
    • dao
    • entities
    • helper
  • presenter
  • ui
    • activity
    • adapter
    • fragment
  • utils
  • view
  • widget

Why build this project?

This project can help you to learn MVP. Maybe could help you know what a good project of framework looks like too.

为什么会开始写这个项目呢?其实是受到一些优秀的开源项目启发,于是本着学习的态度开始了自己开源项目的建立和分享。该项目的名字为《逗逼与文青》,英文名为《DouBi VS WenQ》。在项目中将分别通过两种形式实现内容的展示。什么,为什么要分开它们?因为它们的气质使然。在参考了StarWars.Android,被她优雅的切换模式和双重人格所吸引。于是逗逼和文青两个角色就此被划分了。

DouBi

逗逼模块的灵感来源于一款Swift开发的仿”糗事百科“的开源项目JokeClient-Swift,有了数据一切就好办了。在不以私人利益的前提下,对该版本的“糗事”进行逗逼化。在这个模块中,使用了CoordinatorLayout、CollapsingToolbarLayout、Toolbar。他们具体的介绍和使用,感兴趣的朋友可以自行查看相关文档。SmartTabLayout+ViewPage为内容显示。
在DouBi模块中我们对MVP三个模块进行了隔离,采用EventBus来传递消息。这样做的好处在于模块完全解耦,UI,业务逻辑和数据层(因为懒并没有实现数据本地化)完全分开,真正的做到面向接口编程。不过在这里需要注意的是,EventBus在传递消息的时候是通过post中传递对象的类型来判断,Subscribe是否接受该处理。可想而知如果项目复杂度很高时承载消息的类将会有很多,幸好我们对EventMessage做了抽离。当然我们要付出必要的代价。可读性变低,每个类或者大模块间都需要对出口和入口进行定义实现。需要对项目有很深的理解和经验才能做到游刃有余。

WenQ

文青模块则是借鉴了同为Android开源项目ONE-Unofficial,这个项目高仿了ONE,很多布局也是直接拿来用的,当然如果对比你会发现实现的思路是不一样的。ONE-Unofficial中每个小模块中嵌套的都是ViewPager,在内容加载较多的时候会出现卡顿现象,于是我改为使用RecycleView。这样的好处是卡顿感明显减少了。
WenQ采用的是最传统的MVP模式,UI通过调用presenter接口的相关action,presenter对这些操作进行异步处理,结果通过回调的形式返回给UI,UI更新视图。听起来是不是很简单?没错MVP就是因为结构清晰才会被广为流传。

总结

个人还是觉得传统MVP的模式使用起来得心应手。对于小项目传统的方式完全可以满足我们的需要。当项目模块越来越多,且模块内部越来越庞大。这个时候我们可以考虑在这些独立模块之间建立EventBus来传递消息,从而保持模块独立性。

What it is look like

说了半天终于到了你们想看的东西。无图无真相。好吧,满足你们。

1、Doubi

《JokeAndroidClient》 Screenshot_2016-03-10-11-52-13-708_逗逼VS文青.png

2、WenQ

《JokeAndroidClient》 Screenshot_2016-03-10-11-52-36-668_逗逼VS文青.png

3、菜单

《JokeAndroidClient》 Screenshot_2016-03-10-11-52-42-982_逗逼VS文青.png

4、关于

《JokeAndroidClient》 Screenshot_2016-03-10-11-52-58-229_逗逼VS文青.png

Thanks

Open project

Open source libs

  • Smarttable是table bar的完美解决方案 – compile ‘com.ogaclejapan.smarttablayout:library:1.6.0@aar’
  • 图片加载和显示 – compile ‘com.facebook.fresco:fresco:0.9.0+’
  • EventBus消息处理 – compile ‘org.greenrobot:eventbus:3.0.0’
  • Greendao数据库操作 – compile ‘de.greenrobot:greendao:2.0.0’
  • Butterknife绑定layout布局文件 – compile ‘com.jakewharton:butterknife:7.0.1’

还有一些com.android.support和不常用的可以自行查看他们的作用

Update Record

  • 20160310 – 修改关于我,github,项目的跳转
  • 20160309 – 跟新Header显示icon;修改两种模式切换bug;添加网络异常提示;修改使用中出现的bug
  • 20160308 – 完成doubi模块,解决数据异常情况下的崩溃问题
  • 20160303 – 基本实现WenQ部分内容。待后续完善细节
  • 20160229 – 完善逗逼和文青界面,解决主题切换时出现的bug
  • 20160226 – add volley helper and json parser utils
  • 20160202 – 梳理app的ui结构
  • 20160128 – 调整commonlibraris的结构,添加recyclerview封装代码(以后用中文更新)
  • 20160121 – add common libraries
  • The “commonlibraries” are reusable utils which reference SkillCollege library. And I would continuing update the utils code.
  • 20160119 – Init project

GitHub

GitHub page: RobertZhang
GMail: robertzhangsh#gmail.com
QQ: 1615349135

题外话

为什么会中英文混排,因为wo喜欢!哈哈….

License

Plase see MIT License. If you feel anything no good, contact me.
如果有什么问题,请联系我。我会在第一时间修改。

    原文作者:Robert_Zhang
    原文地址: https://www.jianshu.com/p/f97dfc7a25a1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞