在Android MVP模式(一)中讲到
在MVP 架构中跟MVC类似的是同样也分为三层。
Activity 和Fragment 视为View层,负责处理 UI。
Presenter 为业务处理层,既能调用UI逻辑,又能请求数据,该层为纯Java类,不涉及任何Android API。
Model 层中包含着具体的数据请求,数据源。
三层之间调用顺序为view->presenter->model
所以创建一下package,其他tool为工具包
一.view层
1.创建BaseActivtiy
public abstract class BaseActivtiy extends AppCompatActivity{
protected Activity activity;
protected Context context;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initPresenter();
initView();
initData();
initListener();
}
protected abstract void initPresenter();
protected abstract void initView();
protected abstract void initData();
protected abstract void initListener();
}
2.创建View的回调接口
public interface IBaseView {
void showToast(String t);
void success();
void fail();
}
二.presenter层
1.创建presenter接口
public interface IBasePresenter {
void onCreate();
void onResume();
void onPause();
void onDestroy();
void finish();
void log(String s);
}
2.创建Presenter基类BasePresenter,实现IBasePresenter接口,因为希望Presenter中持有的View都是BaseView
的子类,所以需要泛型来约束
public class BasePresenter<V extends IBaseView> implements IBasePresenter {
protected V mView;
protected Activity mActivity;
public BasePresenter(Activity activity,V iv){
this.mActivity = activity;
this.mView = iv;
}
@Override
public void onCreate() {
}
@Override
public void onResume() {
}
@Override
public void onPause() {
}
@Override
public void onDestroy() {
mActivity = null;
mView = null;
}
@Override
public void finish() {
mActivity.finish();
}
@Override
public void log(String s) {
LogTool.d(s);
}
}
三.Model层
创建MainModel,通过rxjava把信息返回到Presenter层
public class MainModel {
public void getMainData(Observer<String> observer){
Observable.create(new ObservableOnSubscribe<String>(){
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception{
try{
emitter.onNext("hello");
}catch (Exception e){
emitter.onError(e);
}finally {
emitter.onComplete();
}
}
})
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
}
四.创建MainPresenter,继承BasePresenter,接收Model层返回的信息
同时将信息通过view接口传递到View层
public class MainPresenter extends BasePresenter<IBaseView>{
private MainModel mMainModel;
public MainPresenter(Activity activity,IUpdateView iv){
super(activity,iv);
mMainModel = new MainModel();
}
public void loadData(){
mMainModel.getMainData(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
mView.success();
}
@Override
public void onError(Throwable e) {
mView.fail();
}
@Override
public void onComplete() {
mView.showToast("OK");
}
}
);
}
}
五.创建MainActivity继承BaseActivity,实现IBaseView,接收Presenter层信息
public class MainActivity extends BaseActivtiy implements IUpdateView{
MainPresenter mMainPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void initPresenter() {
activity =this;
mMainPresenter = new MainPresenter(activity,this);
}
@Override
protected void initView() {
setContentView(R.layout.activity_main);
}
@Override
protected void initData() {
mMainPresenter.loadData();
}
@Override
protected void initListener() {
}
@Override
public void showToast(String t) {
LogTool.i(t);
}
@Override
public void success() {
LogTool.i("success");
}
@Override
public void fail() {
LogTool.i("fail");
}
}