package com.zenglb.baselib.base; import android.app.Activity; import android.content.Context; import android.support.annotation.CallSuper; import android.support.v4.app.Fragment; import android.view.View; import com.trello.rxlifecycle2.components.support.RxFragment; /** * Base Fragment,实现懒加载,一般的主页面的要求实现懒加载 * <p> * Created by zenglb on 2017/1/5. */ public abstract class BaseFragment extends RxFragment { private String TAG = BaseFragment.class.getSimpleName(); //保证Fragment即使在onDetach后,仍持有Activity的引用(有引起内存泄露的风险,但是相比空指针闪退,这种做法“安全”些) protected Activity mActivity; //防止getActivity()== null protected int visibleTime = 0; //Fragment 可见的次数,只需要区分 0,1,>1 次就行。 protected boolean isViewsInit = false; //标示View 是否初始化完毕了 /** * 会先于onCreate 和onCreateView 执行 * * @param isVisibleToUser */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { //如果是可见 visibleTime++; onVisible(); } else { onInvisible(); } } /** * 一定要super,放在最后面的一行代码来Super! */ @CallSuper protected void initViews(View rootView) { isViewsInit = true; } /** * 选择性的实现懒加载方案,不是所有的Fragment 都需要懒加载的 */ protected abstract void lazyLoadData(boolean isForceLoad); /** * Fragment 可见的时候调用尝试调用加载数据, */ protected void onVisible() { lazyLoadData(false); } /** * Fragment 不可见的时候调用,选择性的使用,可以基本不用 */ protected void onInvisible() { } @Override public void onAttach(Context context) { super.onAttach(context); this.mActivity = (Activity) context; } }