Fragment懒加载方法

public abstract class BaseFragment extends Fragment {
/**
     * 标志位:fragment是否可见
     */
    protected boolean isVisible;

    /**
     * 标志位:是否已加载fragment视图
     */
    private boolean isPrepared = false;
    /**
     * 标志位:是否已进行懒加载数据,保证数据只加载一次
     */
    private boolean isLoadData = false;

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        TAG = this.getClass().getSimpleName();
        Logger.d(TAG, "setUserVisibleHint() -> isVisibleToUser: " + isVisibleToUser);
        if(getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(getLayoutId(), container, false);
        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Logger.d(TAG, "onViewCreated");
        initView(view, savedInstanceState);
        isPrepared = true;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Logger.d(TAG, "onActivityCreated");
        initData();
        //viewpager加载的第一个视图时,第一个视图提前执行setUserVisibleHint方法导致懒加载无效的问题
        onVisible();
    }

    /**
     * fragment可见时执行
     */
    protected void onVisible(){
        if (!isPrepared || !isVisible || isLoadData) {
            return;
        }
        isLoadData = true;
        onLazyLoad();
    }

    /**
     * 懒加载核心方法
     */
    protected  void onLazyLoad(){
        Logger.d(TAG,"onLazyLoad");
    }

     /**
     * fragment不可见时执行
     */
    protected void onInvisible(){}

    protected abstract int getLayoutId();
    
    protected abstract void initView(View view, Bundle savedInstanceState);

    protected abstract void initData();
}

小米通知‘坑’

FlowLayout流布局的使用

PickerView的使用

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐