今天开通了博客,准备开始一段不归之路,想了下该写点什么,前段时间亲身尝试了下MVP+Dagger依赖注入感觉还不错,就简单分享下MVP模式吧,如果说的有问题,希望大神指正。
结构
首先说一下MVP模式,拆开理解就是Model,View,Presenter。Model层处理本地信息存储逻辑处理,View层显示视图,Presenter层用于网络请求等逻辑处理。
具体使用
新建两个文件夹,contract,presenter。contract文件夹下存放每个activity对应M,V,P层要实现的接口,接口具体由自己定义,activity实现view接口,presenter类实现presenter接口,model类实现model接口,废话不多说,直接上代码,具体如下:
public class MainActivityContract { public interface MainActivityView extends BaseView { void showNotification(List<String> notificationList); void showHeaderLine(List<HeadLineBean.DataBean> headerLineList); } public interface MainActivityPresenter { void getNotificationList(); void getHeaderLineList(); } public interface MainActivityModel { } }
public class MainActivityPresenterImpl extends SimplePresenter<MainActivityContract.MainActivityView> implements MainActivityContract.MainActivityPresenter{ private Context mContext; private List<String> mNotificationList; private List<HeadLineBean.DataBean> mHeaderLineList; public MainActivityPresenterImpl(Context context) { this.mContext = context; } @Override public void getNotificationList() { mNotificationList = new ArrayList<>(); for (int i = 0; i < 5; i++) { mNotificationList.add("今日成都出现雾霭天气,导致多处道路不通"+i); } mView.showNotification(mNotificationList); } @Override public void getHeaderLineList() { mHeaderLineList = new ArrayList<>(); NetApi.getInstance().getHeadLine().subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new BaseSubscriber<HeadLineBean>(CustomApp.getInstance()) { @Override public void onCompleted() { super.onCompleted(); } @Override public void onError(Throwable e) { super.onError(e); } @Override public void onNext(HeadLineBean headLineBean) { super.onNext(headLineBean); if(headLineBean.getCode() == 200){ mHeaderLineList.addAll(headLineBean.getData()); mView.showHeaderLine(mHeaderLineList); } } }); } }
public class SimplePresenter<T extends BaseView> implements BasePresenter<T> { protected T mView; protected String TAG = this.getClass().getSimpleName(); protected Context mContext; @Override public void attachView(T view) { mView = view; } @Override public void detachView() { this.mView = null; } }
public class MainActivity extends BaseActivity implements View.OnClickListener, MainActivityContract.MainActivityView {Dagger依赖注入就不说了,因为自己也了解得不够深入,以免误人子弟,哈哈。第一次使用博客的编辑器有点不习惯,编辑的有点丑,不过孰能生巧,相信下次会好很多。@Inject MainActivityPresenterImpl mPresenter;@Override protected int getContentId() { return R.layout.activity_main; } @Override protected void initInject() { super.initInject(); DaggerActivityComponent.builder().activityModule(new ActivityModule(this)).build().inject(this); if (mPresenter != null) { mPresenter.attachView(this); }
}@Override protected void init(Bundle savedInstanceState) { super.init(savedInstanceState);mPresenter.getNotificationList(); mPresenter.getHeaderLineList();}@Override public void showHeaderLine(List<HeadLineBean.DataBean> headerLineList) { mHeaderLineList.addAll(headerLineList); mHeadLineAdapter.setNewData(mHeaderLineList); startHeadeLineTimer(); }@Override protected void onDestroy() { super.onDestroy(); if (mPresenter != null) { mPresenter.detachView(); } }