public abstract class LazyFragment extends Fragment {
// 控件是否初始化完成
// 我们在控件初始化完成之后再进行数据的加载,否则对控件进行操作的时候会遇到空指针异常
protected boolean isViewCreated;
// 是否加载过数据
// 我们判断未曾加载过数据的话再进行获取,否则每次对用户可见时都会执行懒加载的方法
protected boolean isLoadCompleted;
// 该方法只有在ViewPager与Fragment结合使用的时候才会执行
// 该方法在onCreateView之前调用
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && isViewCreated && !isLoadCompleted) {
// 只有在对用户可见、控件初始化完成并且未曾加载过数据的情况下才进行懒加载
lazyLoad();
isLoadCompleted = true;
}
}
// ViewPager的第一个Fragment默认执行setUserVisibleHint(fasle)方法
// 所以在activity创建完成后要让第一页也加载数据
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (getUserVisibleHint()) {
// 此处不需要判断isViewCreated,因为这个方法在onCreateView方法之后执行
lazyLoad();
isLoadCompleted = true;
}
}
// 懒加载,强制子类重写
protected abstract void lazyLoad();
}
public class NewsFragment extends LazyFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_news, null);
initView(view); // 进行控件的初始化
isViewCreated = true; // 控件初始化完成
return view;
}
@Override
protected void lazyLoad() {
// 加载数据
}
}
//// 这行代码一定要写,否则会出现奇葩问题 viewPager.setOffscreenPageLimit(fragments.size());
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有