返回顶部
首页 > 资讯 > 精选 >Android在ViewPager中如何使用Fragment的懒加载
  • 470
分享到

Android在ViewPager中如何使用Fragment的懒加载

androidfragmentviewpager 2023-05-31 00:05:55 470人浏览 安东尼
摘要

这篇文章给大家分享的是有关Android在ViewPager中如何使用Fragment的懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们先看一下效果:首先,我们要知道什么是懒加载:懒加载,就是先初始化控件

这篇文章给大家分享的是有关Android在ViewPager中如何使用Fragment的懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

我们先看一下效果:

Android在ViewPager中如何使用Fragment的懒加载

首先,我们要知道什么是懒加载:

懒加载,就是先初始化控件,在用户可见的时候再加载数据。

为什么要懒加载?

懒加载多被使用在新闻资讯类客户端中,试想那么多的分类如果一下子都加载出来,真的是极大地消耗了系统资源。可能有人会说 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() 方法进行数据的加载。

网上有很多关于懒加载的文章,也有多种的写法。写一个适合自己的,才是最好的。

感谢各位的阅读!关于“Android在ViewPager中如何使用Fragment的懒加载”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Android在ViewPager中如何使用Fragment的懒加载

本文链接: https://lsjlt.com/news/222469.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作