时间:2021-05-19
我们先看一下效果:
首先,我们要知道什么是懒加载:
懒加载,就是先初始化控件,在用户可见的时候再加载数据。
为什么要懒加载?
懒加载多被使用在新闻资讯类客户端中,试想那么多的分类如果一下子都加载出来,真的是极大地消耗了系统资源。可能有人会说 ViewPager 有 viewPager.setOffscreenPageLimit() 的方法,我们传个 0 进去不就好了吗?看过源码的应该知道,即便你传了 0 进去,系统也会默认为 1 的,也就是 ViewPager 依然会加载当前页面的前后各一个 Fragment 。
我们首先为需要进行懒加载的 Fragment 写一个基类:
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() { // 加载数据 }}这样 Fragment 的懒加载基本算是完成了。还有一点需要注意的是别忘记了写:
//// 这行代码一定要写,否则会出现奇葩问题 viewPager.setOffscreenPageLimit(fragments.size());我这里是在 Activity 启动的时候初始化所有的 Fragment,打印日志会发现每个 Fragemnt 的 onCreateView() 都执行了,也就是说控件全部初始化完毕,之后滑动对用户可见的时候执行 setUserVisibleHint() 方法进行数据的加载。
网上有很多关于懒加载的文章,也有多种的写法。写一个适合自己的,才是最好的。
->->->点击下载源码<-<-<-
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
据说Android最推荐的是在ViewPager中使用FragMent,即ViewPager中的页面不像前面那样用LayoutInflater直接从布局文件加载
昨天的(今天凌晨)的博文《Android中Fragment和ViewPager那点事儿》中,我们通过使用Fragment和ViewPager模仿实现了微信的布局
前言所谓懒加载,就是当fragment完全可见的时候我们再去加载数据,我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与
多层嵌套后的Fragment懒加载印象中从Feed流应用流行开始,Fragment懒加载变成了一个大家都需要关注的开发知识,关于Fragment的懒加载,网上有
一.加载预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存。2.资源预加载懒加载:1.Fragment懒加载2.资源懒加载