MvpFrame是一款是一款MVP通用框架,使用简单,有效的解决项目中的高度耦合性,使项目更有层次结构。
随着项目的功能迭代,传统的MVC架构已经很难满足开发需求了,高耦合让维护成本变得越来越高,代码冗余程度也越来越高,代码最后变得臃肿不堪。所以,在实际项目中,我们跟多的选择MVP架构。MVP架构是代码结构层次更加清晰、项目更加容易维护,代码耦合性降低了。本文对于基础的mvp使用不做解释。
1)用泛型指定Presenter层,然后直接createPresenter方法即可获取到对于的presenter。
2)Presenter的生命周期与Activity生命周期同步绑定。
3)抽象工厂模式和反射机制,获取每个Presenter对象。
4)对Presenter的缓存处理。
5)异常情况下(如内存吃紧),对Presenter进行onSaveInstanceState保存数据的异常处理。
dependencies {
implementation 'com.alin:mvpframe:1.0.2'
implementation 'com.alin:common-library:1.0.1'
}
TestMvpPresent mPresenter = createPresenter();
mPresenter.startWork();
@TargetPresenter(TestMvpPresent.class)
public class TestMvpActivity extends MvpActivity<TestMvpPresent> implements Contract.IView<TestBean>, View.OnClickListener {
private TestMvpPresent mPresenter;
@Override
protected int getContentViewId() {
return R.layout.activity_test_activity;
}
@Override
protected void init(Bundle savedInstanceState) {
// 创建说需要的Presenter
mPresenter = createPresenter();
}
@OnClick({R.id.start_tv,R.id.skip_tv})
public void onClick(View view){
switch (view.getId()){
case R.id.start_tv:
mPresenter.startWork();//调用Presenter的初始化方法
break;
}
}
@Override
public Context getViewContext() {
return this;
}
@Override
public void showContentView() {
}
// 数据请求失败回调
@Override
public void showError(String errorInfo, int errorCode) {
}
// 数据请求成功回调
@Override
public void showContentData(TestBean data) {
if (data != null) {
showLog(data.toString());
ToastUtil.showCenterToast(this,"TestMvpActivity : " + data.toString());
}
}
}
@TargetPresenter(TestMvpPresent.class)
public class TestMvpFragment extends MvpFragment<TestMvpPresent> implements Contract.IView<TestBean>, View.OnClickListener {
private TestMvpPresent mPresenter;
@Override
protected int getContentViewId() {
return R.layout.fragment_test_mvp;
}
@Override
protected void init(Bundle savedInstanceState, View view) {
// 创建说需要的Presenter
mPresenter = createPresenter();
}
@OnClick({R.id.start_fm_tv})
public void onClick(View view ){
switch (view.getId()){
case R.id.start_fm_tv:
mPresenter.startWork();
break;
}
}
@Override
public Context getViewContext() {
return getContext();
}
@Override
public void showContentView() {
mTestRllyt.showContentView();
}
// 数据请求失败回调
@Override
public void showError(String errorInfo, int errorCode) {
mTestRllyt.showEmptyView();
}
// 数据请求成功回调
@Override
public void showContentData(TestBean data) {
if (data != null) {
showLog(data.toString());
ToastUtil.showCenterToast(getContext(),"TestMvpFragment : " + data.toString());
}
}
}
如果只是简单的Activity、Fragment,不想继承MvpActivity、MvpFragment,可以直接继承CommonActivity。
public class TestCommonActivity extends CommonActivity {
@Override
protected int getContentViewId() {
return R.layout.activity_test_common;
}
@Override
protected void initialize(Bundle savedInstanceState) {
}
}
public class TestCommonFragment extends CommonFragment {
@Override
protected int getContentViewId() {
return R.layout.activity_test_common;
}
@Override
protected void initialize(Bundle savedInstanceState) {
}
}
解决方式:请点击查看CommonLibrary,使用最新版本。
dependencies {
implementation 'com.alin:mvpframe:1.0.2'
implementation 'com.alin:common-library:1.0.1'
}
如果你觉得MvpFrame 能帮到你真正解决项目中的问题,就在博客中个我点个赞,或者去我的MvpFrame中star。
如果项目中有问题,可以直接给我留言。
github地址:https://github.com/Alin520/MVPFrame。
掘金地址:https://juejin.im/post/5a7941c96fb9a0633f0dfe64
CSDN地址:http://blog.csdn.net/hailin123123
联系方式:
欢迎加入QQ群:707202045