Fragment的懒加载

作者: YbSTGing | 来源:发表于2017-12-05 16:18 被阅读11次

    在项目中,如果使用了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的懒加载

        本文链接:https://www.haomeiwen.com/subject/ngecixtx.html