MVP干货Demo

作者: QieZi | 来源:发表于2016-09-09 23:13 被阅读229次

这是一个学习MVP模式的Demo.

一个基于MVP+Retrofit+RxJava+MaterialDesign和gank.io的客户端。

github-app

项目截图

pic1 pic2 pic3 pic4

技术点

1. Retrofit 的使用,包括使用 Http 缓存、converter 的使用等;

2. RxJava 的使用,包括配合 Retrofit

3. MVP 架构实践,包括 presenter 的生命周期管理;

4. RecycleView + CardView 的使用;

5. WebView 的使用,包括显示加载进度条、播放视频等;

6. VideoView 的使用,包括自定义按钮;

7. Activity滑动返回的实现


项目结构

api:   网络接口的一些封装,供Presenter调用

base:   基类

bean:   实体类

contract:   presenter 和  view 的接口

presenter:   presenter 的实现类

view : 

widget:  自定义的控件类

总体框架


GankApi:

public interface GankApi {

      @GET("api/data/休息视频/10/{page}")

      ObservablegetVideoData(@Path("page") int page);

      @GET("api/day/{day}")

      ObservablegetGankData(@Path("day") String day);

}

{}为占位符 接收传入的参数

ApiManager

public  GankApi mGankApi;

public static final String GANK_URL = "http://gank.io/";

public GankApi getGankService(){     if(mGankApi == null){         synchronized (newsClientMonitor){             if(mGankApi ==null){                 mGankApi = new Retrofit.Builder()                       .baseUrl(GANK_URL)                       .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                       .client(client)                       .addConverterFactory(GsonConverterFactory.create())                       .build().create(GankApi.class);             }          }       }       return mGankApi; }

根据传入的GankApi得到一个Subscription对象,在Presenter中使用

GankPresenter 需要继承contract的presenter接口

public void getGankData(String day) {

    Subscription subscribe = ApiManager.getInstence().getGankService().getGankData(day)

    .subscribeOn(Schedulers.io())

    .observeOn(AndroidSchedulers.mainThread())

。。。。。。。。。。。。。。。。。。。。。。

Prensenter中调用getXXData() 方法, 在onNext中得到gson解析完得到的对象,使用传进来的view对象更新数据,这样view层与presenter层就能够很好的被划分。

activity的作用

activity作为全局的控制者,负责创建view以及presenter实例,并将二者联系起来,具体的view交由fragment来实现,两者各司其职。

契约类(contract)

契约类来统一管理view与presenter的所有的接口,这种方式使得view与presenter中有哪些功能,一目了然,维护起来也方便

简单归纳

activity创建fragment及实例化presenter,在实例化的同时,将fragment作为参数传递进去,这样一来在presenter中就可调用view的接口对界面进行更新、展示

presenter实例化时,还调用了view的setPresenter方法,将自身传递进去,这样一来fragment获得了presenter的实例,便可在view中调用presenter进行业务逻辑的操作

view及presenter拥有彼此的实例,实现了在view中调用presenter处理业务,处理完后再presenter中更新view。

总结

至此,一个简单的mvp框架到此结束,对于mvp的使用目前也还在探索中,上例是结合官方发布的demo做的一个简化工程,有不足之处欢迎一起探讨交流!

相关文章

  • MVP干货Demo

    这是一个学习MVP模式的Demo. 一个基于MVP+Retrofit+RxJava+MaterialDesign和...

  • Google MVP Demo深入学习和总结

    Google在2016年推出了官方的Android MVP架构Demo,本文主要分析一下官方的MVP Demo,并...

  • Android十八章:5分钟学会用MVP架构开发Android项

    简单的mvp架构登录demo,根据功能分包,参考自google mvp 主要面向有mvp经验的读者,阅读时间大约 ...

  • Android Mvp实践

    Android Mvp实践 简介 本文是参考google官方发布的MVP架构demo以及前人对MVP实现方式的一些...

  • Android学习MVP架构的最简单方法

    Android MVP Demo 最近总是听说到MVP,自己便开始研究起来,看了两三篇博客,大明其意。 学习MVP...

  • Kotlin MVP Demo

    MVP是一种设计模式,将项目分为Model、View、Presenter三个模块,利用中间层Presenter完成...

  • swift mvp demo

    MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC...

  • MVP_Demo

    首先是几个包是必须的base ui(activity fragment) view presentervi...

  • Android MVP Demo

    MVP作为Android最常用的框架,网上已经有很多相关的解释,每个人对MVP的实现方式都有些许不同,但总的思想还...

  • 一个最最最简单的MVP框架Demo(下)

    上一个Demo是为了让初识MVP的同学在总体上有一个了解,了解大概的运行流程,Demo很不规范和粗暴。 对于MVP...

网友评论

    本文标题:MVP干货Demo

    本文链接:https://www.haomeiwen.com/subject/wgzeettx.html