上次我们对MVP
架构有了基本的了解,并且对我们的例子做了开发前的准备,这次我们就把项目的基本结构目录搭建起来.
基本项目结构
项目是功能模块来进行包管理的,项目中只有一个简单的电影加载模块所以比较简单.下图是目前基本的项目的目录结构:
首先我们有两个抽象的接口,作为所有View
和Presenter
的基类:1
2
3
4
5
6
7
8
9
10/**
* View模块抽象接口
*/
public interface BaseView<T> {
/**
* 将对应的Presenter注入到View当中
* @param presenter 注入的Presenter
*/
void setPresenter(T presenter);
}
1 | /** |
按功能划分的模块管理
项目中采用了按功能划分模块,加载电影模块中的MovieContract.java
是一个管理特定功能下的View
与Presenter
模块:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19/**
* 用于管理loadMovie功能模块的View与Presenter
*/
public class MovieContract {
/**
* loadMovie模块的View,提供对外的UI更新接口
*/
interface View extends BaseView<Presenter>{
}
/**
* loadMovie模块的Presenter,负责获取数据并处理,更新UI
*/
interface Presenter extends BasePresenter{
}
}
具体的接口方法我们会在后面添加.我们通常让Fragment
担任View
的角色:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class MovieFragment extends Fragment implements MovieContract.View{
//持有Presenter的实例
MoviePresenter mPresenter;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
public void setPresenter(MovieContract.Presenter presenter) {
mPresenter = (MoviePresenter) presenter;
}
}
我们具体的Presenter
如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
* 具体的loadMovie模块的Presenter
*/
public class MoviePresenter implements MovieContract.Presenter{
//持有View对象,用于对UI进行更新
MovieContract.View mView;
public MoviePresenter(MovieContract.View view) {
this.mView = view;
mView.setPresenter(this);
}
public void start() {
}
}
上面的代码只是对整个MVP
架构的简单搭建,后面我们会对代码进行一步一步的完善.