Android Mvp实践

澳门新葡亰手机版 4

本文由码农网 –
苏耀东原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!

Android Mvp实践

简介

本文是参考google官方发布的MVP架构demo以及前人对MVP实现方式的一些总结做的一个简单demo,在这里记录一下一点心得,希望能给想用MVP的人一点帮助。

澳门新葡亰手机版 1

简介

本文是参考google官方发布的MVP架构demo以及前人对MVP实现方式的一些总结做的一个简单demo,在这里记录一下一点心得,希望能给想用MVP的人一点帮助。

澳门新葡亰手机版 2

MVP框图

总体框架

总体框架

工程目录结构

首先先看下整个工程的目录结构:

澳门新葡亰手机版 3

澳门新葡亰手机版,目录的代码组织方式是按照功能来组织的,功能内部分为xactivity、xcontract、xfragment、xpresenter四个类文件(x代表业务名称)。base文件夹存放一些公用的基类文件,data文件夹存放业务逻辑相关的代码,utils文件夹则放一些公用的工具类。本demo实现的功能为:通过点击界面上的按钮,获取手机相关信息,获取过程中加入延时及等待提示(模拟网络),最终将信息显示于界面上(简单演示,只是显示了系统时间)。

工程目录结构

首先先看下整个工程的目录结构:

澳门新葡亰手机版 4

目录的代码组织方式是按照功能来组织的,功能内部分为xactivity、xcontract、xfragment、xpresenter四个类文件(x代表业务名称)。base文件夹存放一些公用的基类文件,data文件夹存放业务逻辑相关的代码,utils文件夹则放一些公用的工具类。本demo实现的功能为:通过点击界面上的按钮,获取手机相关信息,获取过程中加入延时及等待提示(模拟网络),最终将信息显示于界面上(简单演示,只是显示了系统时间)。

基类

先看下BasePresenter与BaseView这两个接口类,它们分别是所有Presenter与View的基类。

public interface BasePresenter {
    void start();
}

BasePresenter中含有方法start(),该方法的作用是presenter开始获取数据并调用view中方法改变界面显示,其调用时机是在Fragment类的onResume方法中。

public interface BaseView<T> {
    void setPresenter(T presenter);
}

BaseView中含方法setPresenter,该方法作用是将presenter实例传入view中,其调用时机是在activity的presenter实现类的构造函数中。

基类

先看下BasePresenter与BaseView这两个接口类,它们分别是所有Presenter与View的基类。

public interface BasePresenter {
    void start();
}

BasePresenter中含有方法start(),该方法的作用是presenter开始获取数据并调用view中方法改变界面显示,其调用时机是在Fragment类的onResume方法中。

public interface BaseView<T> {
    void setPresenter(T presenter);
}

BaseView中含方法setPresenter,该方法作用是将presenter实例传入view中,其调用时机是在activity的presenter实现类的构造函数中。

契约类

public interface GetPhoneInfoContract {

    interface View extends BaseView<Presenter> {

        void setTime(String time);

        void showLoading();

        void hideLoading();
    }

    interface Presenter extends BasePresenter {

        void getTime();
    }

}

与比较常见的mvp实现不同,官方的实现中加入了契约类来统一管理view与presenter的所有的接口,这种方式使得view与presenter中有哪些功能,一目了然,维护起来也方便,该实例中presenter的接口实现获取系统时间,view的接口实现时间的显示以及提示对话框的显示及隐藏。

契约类

public interface GetPhoneInfoContract {

    interface View extends BaseView<Presenter> {

        void setTime(String time);

        void showLoading();

        void hideLoading();
    }

    interface Presenter extends BasePresenter {

        void getTime();
    }

}

与比较常见的mvp实现不同,官方的实现中加入了契约类来统一管理view与presenter的所有的接口,这种方式使得view与presenter中有哪些功能,一目了然,维护起来也方便,该实例中presenter的接口实现获取系统时间,view的接口实现时间的显示以及提示对话框的显示及隐藏。

MVP的组织方式

MVP的组织方式