package com.team.zhuoke.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.team.zhuoke.model.ContractProxy; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import butterknife.ButterKnife; import butterknife.Unbinder; /** * 作者:gaoyin * 电话:18810474975 * 邮箱:18810474975@163.com * 版本号:1.0 * 类描述: * 备注消息: * 修改时间:2016/12/5 下午3:03 **/ public abstract class BaseActivity<M extends BaseModel, P extends BasePresenter> extends RxAppCompatActivity { // 定义Presenter protected P mPresenter; protected Unbinder unbinder; // 获取布局资源文件 protected abstract int getLayoutId(); // 初始化数据 protected abstract void onInitView(Bundle bundle); // 初始化事件Event protected abstract void onEvent(); // 获取抽取View对象 protected abstract BaseView getView(); // 获得抽取接口Model对象 protected Class getModelClazz() { return (Class<M>) ContractProxy.getModelClazz(getClass(), 0); } // 获得抽取接口Presenter对象 protected Class getPresenterClazz() { return (Class<P>) ContractProxy.getPresnterClazz(getClass(), 1); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getLayoutId() != 0) { // 设置布局资源文件 setContentView(getLayoutId()); // 注解绑定 unbinder = ButterKnife.bind(this); bindMVP(); onInitView(savedInstanceState); onEvent(); } } /** * 获取presenter 实例 */ private void bindMVP() { if (getPresenterClazz() != null) { mPresenter = getPresenterImpl(); mPresenter.mContext = this; bindVM(); } } private <T> T getPresenterImpl() { return ContractProxy.getInstance().presenter(getPresenterClazz()); } @Override protected void onStart() { if (mPresenter == null) { bindMVP(); } super.onStart(); } private void bindVM() { if (mPresenter != null && !mPresenter.isViewBind() && getModelClazz() != null && getView() != null) { ContractProxy.getInstance().bindModel(getModelClazz(), mPresenter); ContractProxy.getInstance().bindView(getView(), mPresenter); mPresenter.mContext = this; } } /** * activity摧毁 */ @Override protected void onDestroy() { super.onDestroy(); if (unbinder != null) { unbinder.unbind(); } if (mPresenter != null) { ContractProxy.getInstance().unbindView(getView(), mPresenter); ContractProxy.getInstance().unbindModel(getModelClazz(), mPresenter); mPresenter = null; } } }