搭建自己的 android MVP 框架

2017-10-15  本文已影响0人  DaveZ

一、MVP 是什么?
MVP,全称 Model-View-Presenter,它是从经典的 MVC 演变而来的一个开发思想。应用分层结构,使得各层结构各司其职,其中 Model 层负责提供数据,View 层负责页面展示,Presenter 负责业务逻辑处理。

二、MVP 有什么好处?

MVC.png MVP.png

上面两张图分别是 MVC 和 MVP 的结构层次划分图,可以看到 MVP 相较于 MVC 的优点在于 View 和 Model 层间的完全解耦。

三、在 android 项目中搭建自己的 MVP 框架
现有 android 项目中,为了便于更好的开发和维护,基本采用 MVP 框架进行开发。下面我们将一步一步进行 MVP 框架的搭建。

public interface IBaseView {

    Activity getActivity();

}

public abstract class EABaseActivity<P extends EABasePresenter> extends AppCompatActivity
        implements IBaseView {

    private boolean isFirst = true;
    protected P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        generatePresenter();
        setContentView(getLayoutId());
        findViews();
        addEvents();
        if (presenter != null) presenter.onBundle(getIntent().getExtras());
    }

    private void generatePresenter() {

        Type type = getClass().getGenericSuperclass();
        try {
            Type[] types = ((ParameterizedType) type).getActualTypeArguments();
            presenter = (P) ((Class) types[0]).newInstance();
            presenter.setView(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected abstract int getLayoutId();

    protected void findViews() {
    }

    protected void addEvents() {
    }

    public Activity getActivity() {
        return this;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (presenter != null) {
            presenter.onActivityResult(requestCode, resultCode, data);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (isFirst) {
            if (presenter != null) presenter.onAttach();
            isFirst = false;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (presenter != null) presenter.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter != null) {
            presenter.onDetach();
            presenter = null;
        }
    }
}

Activity 的基类。

public class EABasePresenter<V extends IBaseView> {

    protected V view;

    public void setView(V view) {
        this.view = view;
    }

    public void onBundle(Bundle bundle) {

    }

    public void onAttach() {

    }

    public void onResume() {

    }

    public void onDetach() {

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    }

}

四、总结
基本思想大体如此,还是要根据不同的项目进行自己调整,当然这个框架还很不完善,在此只不过是抛块砖罢了。

上一篇 下一篇

猜你喜欢

热点阅读