package com.team.zhuoke.base; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.ViewGroup; import com.team.zhuoke.model.ContractProxy; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import java.util.List; import butterknife.ButterKnife; import butterknife.Unbinder; import me.imid.swipebacklayout.lib.SwipeBackLayout; public abstract class SwipeBackActivity<M extends BaseModel , P extends BasePresenter> extends RxAppCompatActivity { public SwipeBackLayout mSwipeBackLayout; // 定义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(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { processSaveInstanceState(savedInstanceState); } onActivityCreate(); 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); } } protected void processSaveInstanceState(Bundle savedInstanceState) { List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments != null && fragments.size() > 0) { boolean showFlag = false; FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); for (int i = fragments.size() - 1; i >= 0; i--) { Fragment fragment = fragments.get(i); if (fragment != null) { if (!showFlag) { ft.show(fragment); showFlag = true; } else { ft.hide(fragment); } } } ft.commit(); } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mSwipeBackLayout.attachToActivity(this); } @Override public View findViewById(int id) { View view = super.findViewById(id); if (view == null && mSwipeBackLayout != null) { return mSwipeBackLayout.findViewById(id); } return view; } void onActivityCreate() { getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getWindow().getDecorView().setBackgroundDrawable(null); mSwipeBackLayout = new SwipeBackLayout(this); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mSwipeBackLayout.setLayoutParams(params); } public SwipeBackLayout getSwipeBackLayout() { return mSwipeBackLayout; } public void setSwipeBackEnable(boolean enable) { mSwipeBackLayout.setEnableGesture(enable); } }