在项目中,如果使用了ViewPager + Tablayout + 多个fragment 的形式的时候,一般就需要进行懒加载设置了。
主要原因:
1-ViewPager会默认初始化当前fragment前后的多个fragment,导致多次创建和请求数据
2-如果用户只需要查看当前fragment的内容,而不进行滑动的时候,此时如果不设置懒加载,会导致多请求数据,造成流量的浪费。
设置懒加载:
- 思路:设置2个标记,一个用于检查View是否创建完成 一个用于判断当前Fragment是否显示
当以上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;
}
}
}