当前位置: 首页 > news >正文

鸿蒙应用开发实战:轻松实现列表上拉加载更多

文章目录

    • 一、引言
    • 二、效果预览与核心思路
    • 三、代码实现与详解
      • 3.1 定义数据与状态
      • 3.2 构建列表 UI
    • 四、完整代码示例
    • 五、总结

这是一个使用鸿蒙技术开发的本地原生记账应用,非常适合大家用来练手。相关源码已上传至 Github,点击此处查看项目。欢迎大家交流、指正,也欢迎提交 PR。

一、引言

在移动应用开发中,列表的“上拉加载更多”是一个极其常见的交互模式。当用户滑动列表到底部时,自动加载下一页数据,能够极大地提升用户体验。在鸿蒙(HarmonyOS)应用开发中,实现这一效果同样非常便捷。

本文将带你从零开始,手把手实现一个带有“正在加载中”提示的上拉加载效果,让你快速掌握其核心实现原理。

二、效果预览与核心思路

我们先来看一下最终要实现的效果:当列表滑动到底部时,底部会显示一个“正在加载中…”的提示,模拟网络请求完成后,新的数据被追加到列表中,加载提示消失。

实现这个效果,主要依赖以下几个核心点:

  1. List组件:作为列表的容器,提供滚动和布局能力。
  2. onReachEnd事件List组件提供的一个回调事件,当列表滚动到底部时自动触发。
  3. 状态管理:通过一个@State变量来控制“加载中”状态的显示与隐藏。
  4. 数据模拟:使用setTimeout模拟异步网络请求。

三、代码实现与详解

下面我们直接进入代码环节,看看如何一步步构建这个功能。

3.1 定义数据与状态

首先,我们需要定义列表的数据源和一个用于标识加载状态的状态变量。

@Entry@Componentstruct PullUpLoadDemo{// 列表数据源@StateprivatelistData:string[]=[];// 是否正在加载中@StateprivateisLoading:boolean=false;aboutToAppear(){// 初始化时加载第一页数据this.loadMoreData();}// 模拟加载更多数据loadMoreData(){// 模拟网络请求延迟setTimeout(()=>{// 生成新的数据项letnewData:string[]=[];for(leti=0;i<10;i++){newData.push(`列表项${this.listData.length+i+1}`);}// 将新数据追加到现有数据中this.listData=[...this.listData,...newData];// 加载完成,更新状态this.isLoading=false;},1500);// 模拟1.5秒的网络延迟}build(){// ... 构建UI}}

3.2 构建列表 UI

接下来,在build方法中构建我们的列表 UI。关键在于List组件的onReachEnd事件。

build(){Column(){List(){// 1. 使用 ForEach 渲染数据列表ForEach(this.listData,(item:string)=>{ListItem(){Text(item).width('100%').height(80).fontSize(18).textAlign(TextAlign.Center).backgroundColor(Color.White).borderRadius(10).margin({top:10})}},(item:string)=>item)// 2. 在列表末尾添加“加载中”提示项if(this.isLoading){ListItem(){Row(){LoadingProgress().width(24).height(24).margin({right:10})Text('正在加载中...').fontSize(16).fontColor('#666')}.justifyContent(FlexAlign.Center).width('100%').height(60)}}}.width('100%').height('100%').backgroundColor('#F5F5F5')// 3. 核心:监听列表滚动到底部事件.onReachEnd(()=>{// 如果当前正在加载,则直接返回,避免重复请求if(this.isLoading){return;}// 设置加载状态为 true,显示加载提示this.isLoading=true;// 调用加载数据的方法this.loadMoreData();})}.width('100%').height('100%').padding(10)}

四、完整代码示例

为了方便你直接运行和测试,这里提供完整的代码片段。

@Entry@Componentstruct PullUpLoadDemo{@StateprivatelistData:string[]=[];@StateprivateisLoading:boolean=false;aboutToAppear(){this.loadMoreData();}loadMoreData(){setTimeout(()=>{letnewData:string[]=[];for(leti=0;i<10;i++){newData.push(`列表项${this.listData.length+i+1}`);}this.listData=[...this.listData,...newData];this.isLoading=false;},1500);}build(){Column(){List(){ForEach(this.listData,(item:string)=>{ListItem(){Text(item).width('100%').height(80).fontSize(18).textAlign(TextAlign.Center).backgroundColor(Color.White).borderRadius(10).margin({top:10})}},(item:string)=>item)if(this.isLoading){ListItem(){Row(){LoadingProgress().width(24).height(24).margin({right:10})Text('正在加载中...').fontSize(16).fontColor('#666')}.justifyContent(FlexAlign.Center).width('100%').height(60)}}}.width('100%').height('100%').backgroundColor('#F5F5F5').onReachEnd(()=>{if(this.isLoading){return;}this.isLoading=true;this.loadMoreData();})}.width('100%').height('100%').padding(10)}}

运行效果:

五、总结

通过以上步骤,我们成功地在鸿蒙应用中实现了列表的上拉加载更多功能。核心逻辑可以总结为:

  1. 监听事件:利用List组件的onReachEnd事件监听滚动到底部。
  2. 状态控制:通过isLoading状态变量防止重复加载,并控制加载提示的显示。
  3. 数据追加:在模拟的异步请求完成后,将新数据追加到原有数据源中。

这个模式非常通用,你可以轻松地将它应用到实际项目中的分页数据加载场景。希望这篇教程对你有所帮助!

http://www.jsqmd.com/news/1220648/

相关文章:

  • 嵌入式代码 AddressSanitizer 集成实战:Cortex-M 上的堆栈溢出检测红区与 Shadow Memory 机制
  • 如何在macOS上高效制作Windows启动盘:WinDiskWriter完整实用指南
  • 权威靠谱!2026年7月卡地亚官方售后维修网点咨询电话,官方门店地址一览 - 卡地亚官方维修中心
  • 【独家首发】GLM-4-Flash vs GLM-4-Air性能横评:12项基准测试(MMLU、C-Eval、Gaokao-Bench)结果首度公开
  • AM64x/AM243x UART高级应用:IrDA与CIR模式配置实战指南
  • 中山街坊看过来!金价狂飙,闲置黄金别压箱底,这6家靠谱黄金回收点覆盖全城! - 新芸鼎珠宝首饰
  • 恩施防水修缮优选|筑宅安99.5高分五星品牌,专治雨季各类漏水难题 - 筑宅安
  • RO反渗透复合滤芯净饮机
  • 鸿蒙原生开发手记:徒步迹 - @ohos.data.relationalStore 数据库
  • 哈尔滨甲醛检测治理公司哪家靠谱?多方对比家装除甲醛优劣,安心居环保专业度实测分析 - 专注室内空气检测治理
  • static_status部署指南:在Linux服务器上设置自动化状态监控
  • 紧急通知:Kimi v2.3.7起PDF分块逻辑重大更新!未适配的旧指令将导致关键段落丢失(含迁移检查清单+兼容性验证脚本)
  • HarmonyOS Next 鸿蒙应用弹框和提示气泡详解
  • 终极免费macOS光标主题:为Windows和Linux系统注入苹果设计美学
  • 【Kimi网页分析功能深度解密】:20年老炮亲测的5大隐藏技巧,90%用户从未用过!
  • 通往具身智能之路——TVA协同进化机制(20)
  • 免费在线去水印工具实测,一键去水印在线怎么操作 - 科技热点发布
  • TVA与世界模型共创具身智能“类脑想象力”(系列)
  • 2026年武汉科谷技工学校最新官网招生简章 - 武汉中职最新信息发布
  • VC++实现三次样条曲线拟合:原理、算法与工程实践
  • 2026日照市家里卫生间漏水、阳台漏水、楼顶漏水、地下室渗水、阳光房漏水哪家防水公司做的好!核心靠谱公司推荐 - 吉林同城获客
  • 力学测试数据离散大?几款实用结构专利标准化检测流程
  • 模型推理确定性验证框架设计:同一输入在不同优化级别下的输出一致性测试方案
  • 如何利用custom-device-emulation-chrome优化移动端Web开发测试流程
  • Kimi网页分析功能权限体系深度逆向(含Token鉴权漏洞预警、企业级RBAC配置模板及审计日志规范)
  • docker-compose安装ES集群-元一软件
  • Android自动化打卡终极指南:告别忘记打卡的烦恼
  • UVa 480 Tempus Fugit
  • 三星固件下载革命:Bifrost如何让官方固件获取变得简单快捷
  • 豆包视频怎么去水印,实测盘点这几款免安装工具 - 科技热点发布