发布时间:2026/7/17 0:14:24
鸿蒙原生开发手记:徒步迹 - 路线列表页与@LazyForEach 鸿蒙原生开发手记徒步迹 - 路线列表页与LazyForEach使用 LazyForEach 实现高性能长列表一、前言路线列表是用户浏览路线的入口。当路线数据量大时使用 LazyForEach 进行懒加载可以显著提升性能。二、LazyForEach 基础2.1 原理LazyForEach 只渲染可见区域的列表项离屏的列表项会被回收大幅减少内存占用。2.2 使用步骤// 1. 定义数据源实现 IDataSource 接口 class RouteDataSource implements IDataSource { private data: HikingRoute[] []; totalCount(): number { return this.data.length; } getData(index: number): HikingRoute { return this.data[index]; } registerDataChangeListener(listener: DataChangeListener): void {} unregisterDataChangeListener(listener: DataChangeListener): void {} } // 2. 创建数据源实例 State private dataSource: RouteDataSource new RouteDataSource(); // 3. 在 LazyForEach 中使用 LazyForEach(this.dataSource, (item: HikingRoute) { ListItem() { RouteCard({ route: item }); } }, (item: HikingRoute) item.id.toString());三、完整路线列表实现// 数据源 class RouteDataSource extends ArrayListHikingRoute { // 实现 IDataSource 接口的方法... } Entry Component struct RouteListPage { State private dataSource: RouteDataSource new RouteDataSource(); State private currentPage: number 1; private listScroller: Scroller new Scroller(); aboutToAppear(): void { this.loadRoutes(); } build() { Column() { // 顶部导航 Row() { Text(路线列表) .fontSize(18) .fontWeight(FontWeight.Bold) .layoutWeight(1) .textAlign(TextAlign.Center); } .width(100%) .padding(16); // 搜索框 SearchBar(); // 懒加载列表 List() { LazyForEach(this.dataSource, (route: HikingRoute) { ListItem() { RouteCard({ route: route, onClick: () { router.pushUrl({ url: pages/RouteDetailPage, params: { routeId: route.id }, }); }, }); } }, (route: HikingRoute) route.id.toString()); } .width(100%) .layoutWeight(1) .onReachEnd(() { // 触底加载更多 this.loadMore(); }); } .width(100%) .height(100%) .backgroundColor(#F5F5F5); } async loadRoutes(): Promisevoid { const response await apiService.getRoutes(this.currentPage, 10); // 添加到数据源... } loadMore(): void { this.currentPage; this.loadRoutes(); } }四、性能优化建议固定 Item 高度给 ListItem 设置固定高度减少重绘避免在列表项中使用复杂动画合理设置缓存cachedCount(5)设置预渲染的项数五、总结LazyForEach 是处理大规模列表的关键工具让路线列表页可以流畅滚动。配合触底分页加载用户体验良好。下一篇文章实现路线搜索与筛选功能。下一篇预告鸿蒙原生开发手记徒步迹 - 路线搜索与筛选功能

相关新闻

2026/7/17 0:09:23

MySQL 用户权限管理:创建用户、分配权限,实战操作

前言线上数据库绝对不能直接使用 root 账号给程序连接,权限过大一旦泄露整库沦陷。 本文完整实操:创建账号、授权、回收权限、修改密码、删除用户,适配运维与开发日常操作。一、登录 root 管理员账号mysql -uroot -p二、创建新用户语法-- 格式…

2026/7/17 0:09:23

零代码私有化自动化AI算法训练服务器DLTM让AI训练人人可用

在人工智能快速渗透各行各业的今天,越来越多的企业意识到:拥有贴合自身业务的专属AI模型,已经成为降本增效、构建竞争壁垒的关键。然而,传统AI模型训练门槛极高,需要专业的算法团队、昂贵的算力投入,这让许…

2026/7/17 1:29:31

YOLOv8 CPU版实战:从训练到部署全流程指南

1. YOLOv8 CPU版全流程实战指南在目标检测领域,YOLO系列算法一直以其实时性和准确性著称。最新发布的YOLOv8在保持速度优势的同时,进一步提升了检测精度。本文将详细介绍如何在普通CPU环境下完成从数据标注到模型部署的全流程,特别适合没有GP…

2026/7/17 1:29:31

AI模型隐写信号与安全评估:从概率分布到供应链风险

最近在AI安全领域有个让人震惊的发现:Anthropic的研究团队给AI模型做了类似"脑电图"的分析,竟然发现了模型内部的"意识舞台"。这个发现不仅颠覆了我们对AI安全评估的传统认知,更揭示了模型训练过程中隐藏的安全隐患。作为…

2026/7/17 1:29:31

Win10系统CMD命令激活原理与实战指南

1. 项目概述:CMD命令激活Win10系统的原理与价值在Windows系统管理中,激活环节往往是刚需但容易被忽视的技术点。传统激活方式通常依赖第三方工具或密钥购买,而通过CMD命令行的原生激活方案,不仅规避了第三方软件的安全风险&#x…

2026/7/17 1:29:31

CH32V307 RISC-V开发入门:GPIO驱动LED实战指南

1. 为什么选择CH32V307作为嵌入式开发入门作为一名从STM32转战RISC-V架构的嵌入式开发者,我最初接触CH32V307这款国产MCU时,最惊讶的是它不到10元的价格却提供了Cortex-M4级别的性能。这款由南京沁恒推出的32位RISC-V微控制器,搭载了青稞V4F处…

2026/7/17 1:29:31

提升电脑操作效率的20个实用技巧

1. 电脑高效操作的核心逻辑作为每天与电脑打交道的从业者,我深刻体会到掌握高效操作技巧对工作效率的提升有多重要。很多人用了十几年电脑,却还在用最原始的方式处理文件、管理窗口、执行重复操作。今天分享的这些技巧,都是我在软件公司做技术…

2026/7/15 17:04:06

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/17 1:21:45

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/15 23:18:22

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/17 0:04:23

BiSheng JDK-build性能调优:构建速度提升30%的优化策略

BiSheng JDK-build性能调优:构建速度提升30%的优化策略 【免费下载链接】bishengjdk-build BiSheng JDK build and test scripts - common across all releases/versions 项目地址: https://gitcode.com/openeuler/bishengjdk-build 前往项目官网免费下载&am…

2026/7/16 13:58:36

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…