setUserVisibleHint : viewPager+ Fragment 懒加载的实现

一 来源:

setUserVisibleHint :设置Fragment 内部维系是否可见的mUserVisibleHint【Boolean型】变量的 方法

   public void setUserVisibleHint(boolean isVisibleToUser) {
        if (!mUserVisibleHint && isVisibleToUser && mState < STARTED
                && mFragmentManager != null && isAdded()) {
            mFragmentManager.performPendingDeferredStart(this);
        }
        mUserVisibleHint = isVisibleToUser;
        mDeferStart = mState < STARTED && !isVisibleToUser;
    }

当此Fragment可见变化时通过setUserVisibleHint 此方法 设置isVisibleToUser   true为可见  false 为不可见

通过getUserVisibleHint ()获取当前Fragment是否可见

 public boolean getUserVisibleHint() {
        return mUserVisibleHint;
    }

二 实现:

在设置可见的时候判断是否可以加载数据  具体实现如下:  

public class BasePageFragment extends Fragment{
    // fragment是否初始化
    protected boolean isInit = false;
    // 是否加载过数据   标记 防止滑动viewpager重复加载
    protected boolean isLoadData = false;
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        isInit = true;
        // viewpager里首个fragment首次加载数据
        view.post(new Runnable() {
            @Override
            public void run() {
                canLoadData();
            }
        });
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        isInit = false;
        isLoadData = false;
    }

    /**
     *  fragment 是否可见变化
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        canLoadData();
    }

    private void canLoadData() {
        // fragment 未初始化
        if (!isInit) {
            return;
        }
        // 当fragment可见时 判断是否加载过数据,
        if (getUserVisibleHint()) {
            if (!isLoadData) {
                // 加载数据
                loadData();
                isLoadData = true;  // 加载完改变标记 防止滑动重复加载
            }
        }
    }

    /**
     *  执行加载数据的方法
     */
    protected void loadData() {}
}



猜你喜欢

转载自blog.csdn.net/xuwb123xuwb/article/details/80309336
今日推荐