BaseMVP

2018-03-28  本文已影响0人  啊了个支
public class TUtils {
    public static <T> T getT(Object o, int i){
        try {
            return ((Class<T>)(((ParameterizedType)(o.getClass().getGenericSuperclass())).getActualTypeArguments()[i])).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassCastException e){
            e.printStackTrace();
        }
        return null;
    }
}


public abstract class BasePresenter<M,V> {
    private WeakReference<V> weakRefView;


    public M mModle;

    public void setVM(M m,V v){
        this.mModle=m;
        weakRefView = new WeakReference<V>(v);
    }

    public void detach() {
        if(isAttach()) {
            weakRefView.clear();
            weakRefView = null;
        }
    }

    public V getView(){
        return isAttach()?weakRefView.get():null;
    }

    protected boolean isAttach() {
        return weakRefView != null && weakRefView.get() != null;
    }
}


public abstract class BaseFragment<P extends BasePresenter, M extends BaseModle> extends Fragment {
    public P mPresenter;
    public M mModle;
    private View rootView;
    private Unbinder unbinder;
    private Context mConetxt;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.mConetxt=getActivity();
    }

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (rootView == null)
            rootView = inflater.inflate(getLayoutID(), container, false);
        unbinder =ButterKnife.bind(this,rootView);
        initPresenter();
        initView();
        return rootView;
    }

    /**
     * 通过Class跳转界面
     **/
    public void startActivity(Class<?> cls) {
        startActivity(cls, null);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivity(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

/**
     * 通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, int requestCode) {
        startActivityForResult(cls, null, requestCode);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, Bundle bundle,
                                       int requestCode) {
        Intent intent = new Intent();
        intent.setClass(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if(mPresenter!=null)
            mPresenter.detach();
        unbinder.unbind();
    }

  protected abstract void initView();

    protected abstract void initPresenter();

    protected abstract int getLayoutID();
}


public abstract class BaseEventActivity<P extends BasePresenter, M extends BaseModle,E extends RxEvent> extends BaseActivity<P,M>{
    protected abstract void onEventReceive(E e);

    protected abstract void onEventError();

    protected abstract void register(Class<E> clazz);
}



public abstract class BaseActivity<P extends BasePresenter, M extends BaseModle> extends AppCompatActivity{
    //public RxManager mRxManage = new RxManager();
    @Inject
    public RxManager mRxManage;

    public P mPresenter;
    public M mModle;
    public Context mContext;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutID());
        ButterKnife.bind(this);
        mContext = this;
        mPresenter = TUtils.getT(this, 0);
        mModle = TUtils.getT(this, 1);
        injectRxManager(((IRx)getApplication()).getmRxcomponent());
        initPresenter();
        initView();
    }

 protected abstract void injectRxManager(RxBusComponent rxBusComponent);

    protected abstract void initView();

    protected abstract void initPresenter();

    protected abstract int getLayoutID();

    /**
     * 通过Class跳转界面
     **/
    public void startActivity(Class<?> cls) {
        startActivity(cls, null);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivity(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

 /**
     * 通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, int requestCode) {
        startActivityForResult(cls, null, requestCode);
    }

    /**
     * 含有Bundle通过Class跳转界面
     **/
    public void startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mPresenter != null) {
            mPresenter.detach();
        }
        if(mRxManage!=null)
        mRxManage.unSubscribe(this);
    }

}


public abstract class RxAplication extends Application implements IRx{
    private RxBusComponent mRxcomponent;

    @Override
    public void onCreate() {
        super.onCreate();
        injectRxBus();
        onRxCreated();
    }

    protected abstract void onRxCreated();


    @Override
    public void injectRxBus() {
        mRxcomponent= DaggerRxBusComponent.builder().rxMoudle(new RxMoudle()).build();
    }

    @Override
    public RxBusComponent getmRxcomponent() {
        return mRxcomponent;
    }
}




上一篇下一篇

猜你喜欢

热点阅读