首先说明:Google的架构demo的地址是:
https://github.com/googlesamples/android-architecture
里面很多sample,说明如下:
本文是基于MVP基础结构demo进行的;
进入demo后会有:
分别是 :
- addedittask是页面,对应addedittaskActivity;
- data是Model包了;
- statistics是页面,对应statisticsActivity;
- taskdetail是页面,对应taskdetailActivity;
- tasks是页面,对应tasksActivity;
- Util是工具包;
- BasePresenter是所有的Presenter的爸爸;
- BaseView是所有的View的爸爸;
这里面有几个页面都分别采用MVP结构,随便点击进入tasks包,我们就分析一个足够了:
好了现在开始琢磨说明是MVP;
M这里没有 就是前面的data包里面内容;
V就是TaskDetailFragment;(用Fragment的原因官网有说)
P就是TaskDetailPresenter;
那TaskDetailActivity、TaskDetailContract是什么角色?
TaskDetailActivity的角色就是:
把V和P联合一起,赋予他们两生命力(生命周期);
TaskDetailContract的角色就是:
契约类来统一管理view与presenter的所有的接口,
用处:使得view与presenter中有哪些功能,一目了然,维护起来也方便,如下:
实现过程:
先说V和P的交互,M和P的交互后面补。
组内四个角色,Fragment是前端员工V,Presenter是后端员工P;Contract是HR;Activity是组长;
还有两个角色:BaseView是组员V的爸爸、BasePresenter是组员P的爸爸;
V爸爸的家规是:孩子V一定要投靠员工P(BaseView里setPresenter(T Presenter))
P爸爸的家规是 孩子P一定要照顾好V的开始状态(BasePresenter里start())
HR(Contract)是按照需求去招聘组员P和组员V的,所以知道并要求他们两个有什么功能;如下图:
组员V可以做:setLoadingIndicator()、showMissingTask()...
组员P可以做:editTask()、deleteTask()...
组长Activity 把员工V和员工P两个拉一起说你们跟我一起做项目,
然后V和P的吃喝拉撒(生命周期)就跟组长Activity一起了。
过程:
心得:
为什么V爸爸BaseView要实现setPresenter呢?
个人觉得,应该是Activity懒得帮你们绑在一起了,然后直接在Presenter的构造函数里面设置把View也传进去给Presenter,让Presenter自己在构造函数里面绑定一起。