Fragment+ViewPager懒加载

  ViewPager的预加载机制,会自动加载左右两边的页面,影响性能,甚至出现卡顿。解决方案如下:

public abstract class BaseFragment extends Fragment {

    //view是否创建完成
    private boolean isViewCreated;

    //fragment是否可见
    private boolean isUIVisible;

    //是否加载过数据
    private boolean isDataLoaded;

    /**
     * 懒加载数据,子类实现该方法
     */
    protected abstract  void lazyLoadData();


    /**
     * ViewPager切换时调用
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            isUIVisible = true;
            lazyLoad();
        } else {
            isUIVisible = false;
        }
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        isViewCreated = true;
        lazyLoad();
    }


private void lazyLoad() {
        if (isViewCreated&&isUIVisible&& !isDataLoaded) {
            lazyLoadData();
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false;
            isUIVisible = false;
            isDataLoaded =true;
        }
}

//1⃣️setUserVisibleHint是在onViewCreated前面调用的,切换页面,都会调用多次
//2⃣️确保数据在onViewCreated后调用

你可能感兴趣的:(Fragment+ViewPager懒加载)