封装的base类
- BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity { protected P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(provideLayoutId()); ButterKnife.bind(this); //initView(); initData(); initListener(); //提供presenter绑定 presenter = ProvidePresenter(); } protected abstract P ProvidePresenter(); //设置监听 protected abstract void initListener(); //初始化数据 protected abstract void initData(); // //初始化view // protected abstract void initView(); //提供布局id protected abstract int provideLayoutId(); @Override protected void onDestroy() { super.onDestroy(); //解绑,避免内存泄漏 if (presenter != null) { presenter.onDetach(); } } }
BasePresenter
public abstract class BasePresenter<V extends IView> {
protected CompositeDisposable compositeDisposable = new CompositeDisposable();
protected V view;
public BasePresenter(V view) {
this.view = view;
initModel();
}
protected abstract void initModel();
public void onDetach() {
if (view!=null){
view = null;
}
compositeDisposable.clear();
}
protected Context context() {
if (view != null && view.context() != null) {
return view.context();
}
return MyApp.getAppContext();
}
}
BaseFragment
public abstract class BaseFragment<P extends BasePresenter>extends Fragment { protected View mView; protected Activity mActivity; protected Context mContext; protected P presenter; private Unbinder mUnBinder; @Override public void onAttach(Context context) { mActivity = (Activity) context; mContext = context; super.onAttach(context); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mView = inflater.inflate(getLayoutId(), container, false); mUnBinder = ButterKnife.bind(this, mView); //initRefresh(); presenter = ProvidePresenter(); return mView; } protected abstract P ProvidePresenter(); /** * onDestroyView中进行解绑操作 */ @Override public void onDestroyView() { super.onDestroyView(); mUnBinder.unbind(); //解绑,避免内存泄漏 if (presenter != null) { presenter.onDetach(); } } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); initListener(); //updateViews(false);//刷新 } protected abstract int getLayoutId(); protected abstract void initInjector();//Dagger 注入 protected abstract void initView(); protected abstract void initListener(); }