详解Android 在 ViewPager 中使用 Fragment 的懒加载
发布时间 - 2026-01-11 02:07:07 点击率:次我们先看一下效果:
首先,我们要知道什么是懒加载:
懒加载,就是先初始化控件,在用户可见的时候再加载数据。
为什么要懒加载?
懒加载多被使用在新闻资讯类客户端中,试想那么多的分类如果一下子都加载出来,真的是极大地消耗了系统资源。可能有人会说 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() 方法进行数据的加载。
网上有很多关于懒加载的文章,也有多种的写法。写一个适合自己的,才是最好的。
->->->点击下载源码<-<-<-
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# fragment的懒加载
# fragment懒加载
# fragment懒加载数据
# androidx下的fragment的lazy懒加载问题详解
# Android 多层嵌套后的 Fragment 懒加载实现示例
# Android优化方案之Fragment的懒加载实现代码
# Android仿今日头条多个fragment懒加载的实现
# Android之Viewpager+Fragment实现懒加载示例
# Android开发技巧之Fragment的懒加载
# Android开发之Fragment懒加载的几种方式及性能对比
# 加载
# 的是
# 子类
# 自己的
# 是在
# 也有
# 好了
# 也会
# 第一个
# 最好的
# 才是
# 不需要
# 有很多
# 才会
# 那么多
# 不就
# 要知道
# 重写
# 要让
# 会说
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在景安云服务器上绑定域名并配置虚拟主机?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
如何构建满足综合性能需求的优质建站方案?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel如何实现用户注册和登录?(Auth脚手架指南)
网站制作免费,什么网站能看正片电影?
如何快速查询网站的真实建站时间?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Python自动化办公教程_ExcelWordPDF批量处理案例
java中使用zxing批量生成二维码立牌
如何实现建站之星域名转发设置?
海南网站制作公司有哪些,海口网是哪家的?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
js代码实现下拉菜单【推荐】
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel怎么使用Intervention Image库处理图片上传和缩放
EditPlus中的正则表达式 实战(1)
晋江文学城电脑版官网 晋江文学城网页版直接进入
详解Android中Activity的四大启动模式实验简述
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何在IIS中配置站点IP、端口及主机头?
JavaScript模板引擎Template.js使用详解
Linux后台任务运行方法_nohup与&使用技巧【技巧】
做企业网站制作流程,企业网站制作基本流程有哪些?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何快速生成可下载的建站源码工具?
Laravel集合Collection怎么用_Laravel集合常用函数详解
python中快速进行多个字符替换的方法小结
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
网站建设要注意的标准 促进网站用户好感度!
实例解析Array和String方法
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel PHP版本要求一览_Laravel各版本环境要求对照
javascript基于原型链的继承及call和apply函数用法分析
如何在IIS管理器中快速创建并配置网站?
如何快速搭建支持数据库操作的智能建站平台?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何处理异常和错误?(Handler示例)
Python文件流缓冲机制_IO性能解析【教程】
如何在Windows环境下新建FTP站点并设置权限?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
简单实现jsp分页
Laravel Fortify是什么,和Jetstream有什么关系
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】

