google-android-mvp例子简析

google-android-mvp例子简析

我今天要分析的是google在github上提供的使用mvp的例子。项目的源代码传送门

代码的编写工具是Android studio 没有该工具的同学可以点击androidtool或者google develaper(这个需要科学上网)去下载。

好了开始正题,项目clone下来先在模拟器上运行看看实现的效果

主页面

我就从这个主页面上分析如何使用mvp模式进行设计的,其他界面的实现方式类似,源码的的包的组织模式不是我们平常通过功能进行区分的,源码的包的组织形式主要是把不同Activity的实现组成一个包,其中主页面的包结构如下图:

主页面的包内容

其中ScrollChildSwipeRefreshLayout和TaskFilterType与mvp的关系不大,ScrollChildSwipeRefreshLayout这是一个自定义的view,用来完成下拉刷新的功能,TasksFilterType是定义数据的状态的枚举。

google把p和v的接口方法写在了TaskContract这个接口中:

public interface TasksContract {
    interface View extends BaseView<Presenter> {...}
     interface Presenter extends BasePresenter {...}

在View这个接口除了继承了BaseView这个接口的
void setPresenter(T presenter);方法外定义了一系列的show方法用于控制界面的展示。

在Presenter这个接口除了继承BasePresenter这个接口的
void start();方法外还定义了一系列的控制方法。就个人对对于这些接口方法的理解而言,在View这个接口中主要是控制小范围的界面变化,而Presenter这个接口中的方法主要针对用户的操作,比如点击toolbar上的item。

在TestsActivity中除了完成Presenter、toolbar、DrawerLayout等的初始化之外没有任何其他的业务逻辑控制。(嗯,Activity中的代码看起来贼清爽),主要的界面变化放在了Fragment中进行了实现(这也是google推荐的实现方式)。TasksFragment实现了TasksContract.View这个接口的所有方法,并通过setPresenter方法设置TasksContract.Presenter的实现类,之后就可以愉快的在控件的xxxClickListener方法中调用Presenter中的各种方法了。TasksPresenter是TasksContract.Presenter的实现类,在实例化这个类的时候把TasksContract.View接口的实现类传入。并通过调用View接口的
setPresenter方法完成Presenter和View之间的绑定,因为TasksContract.View的实现类是作为构造参数传入的,因此,在Presenter的实现方法可以通过调用TasksConContract.View的实现类的各种界面展示方法来完成与用户的交互。很好的做到了界面控制和交互之间的解耦。

恩,这个源码大体就是这样,如果还有不太明白的可以通过查看项目, 结合运行效果进行同步理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章