Fragment的懒加载

在项目中,如果使用了ViewPager + Tablayout + 多个fragment 的形式的时候,一般就需要进行懒加载设置了。

主要原因:
1-ViewPager会默认初始化当前fragment前后的多个fragment,导致多次创建和请求数据
2-如果用户只需要查看当前fragment的内容,而不进行滑动的时候,此时如果不设置懒加载,会导致多请求数据,造成流量的浪费。

设置懒加载:

  1. 思路:设置2个标记,一个用于检查View是否创建完成 一个用于判断当前Fragment是否显示
    当以上2个条件同时满足的时候,进行数据请求并加载。
  2. 案例:
public abstract class BaseFragment extends Fragment {

   //Fragment的View加载完毕的标记
    private boolean isViewCreated;
    //Fragment对用户可见的标记
    private boolean isUIVisible;
    
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        isViewCreated = true;
        lazyLoad();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        //isVisibleToUser这个boolean值表示:该Fragment的UI 用户是否可见
        if (isVisibleToUser) {
            isUIVisible = true;
            lazyLoad();
        } else {
            isUIVisible = false;
        }
    }
  
     private void lazyLoad() {
        //对上面2个条件判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,才加载数据
        if (isViewCreated && isUIVisible) {
            //自定义加载数据的方法
            onLazyLoadData();
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false;
            isUIVisible = false;
        }
    }

}

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