HarmonyOs应用《日记本》开发第16篇 - 日记列表页面 Index 详解
本篇深入剖析鸿蒙日记应用的核心入口页面——Index 日记列表页的完整实现涵盖页面结构、状态管理、数据加载与交互逻辑。一、页面概述Index 页面是整个日记应用的首页用户打开应用后首先看到的就是日记列表。该页面负责展示所有已创建的日记条目提供新建日记的入口FAB 浮动按钮支持点击进入日记详情支持长按删除日记空列表状态展示二、页面结构设计2.1 整体布局┌─────────────────────────┐ │ 标题栏 (日记) │ ├─────────────────────────┤ │ │ │ 日记列表 (List) │ │ ┌─────────────────┐ │ │ │ 日期 | 天气心情 │ │ │ │ 内容预览... │ │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ │ 日期 | 天气心情 │ │ │ │ 内容预览... │ │ │ └─────────────────┘ │ │ │ │ ┌───┐ │ │ │ │ FAB │ │ └───┘ │ └─────────────────────────┘2.2 状态变量定义EntryComponentstruct Index{Statediaries:DiaryInfo[][]StateisLoading:booleanfalseprivatediaryStore:DiaryStoreDiaryStore.getInstance()aboutToAppear(){this.loadDiaries()}}关键点解析State diaries日记数组是页面的核心状态数据变化时自动触发 UI 刷新State isLoading加载状态标志控制加载动画的显示diaryStore通过单例模式获取数据存储实例避免重复创建三、数据加载逻辑3.1 aboutToAppear 生命周期aboutToAppear(){this.loadDiaries()}privateasyncloadDiaries(){this.isLoadingtruetry{this.diariesawaitthis.diaryStore.getAllDiaries()// 按日期降序排序this.diaries.sort((a,b){returnnewDate(b.date).getTime()-newDate(a.date).getTime()})}catch(error){console.error(加载日记失败: error)}finally{this.isLoadingfalse}}执行流程页面即将显示时自动触发aboutToAppear调用loadDiaries()从 Preferences 异步读取数据按日期降序排序最新的日记显示在最前面异常处理确保网络或存储错误不会导致页面崩溃3.2 页面刷新机制当用户从编辑页面返回时需要刷新列表数据onPageShow(){this.loadDiaries()}这确保了新建或编辑日记后列表能及时反映最新数据。四、列表渲染4.1 List 与 ForEachList({space:12}){ForEach(this.diaries,(diary:DiaryInfo,index:number){ListItem(){this.DiaryCard(diary)}.onClick((){this.goToDetail(diary.id)})},(diary:DiaryInfo)diary.id)}.width(100%).layoutWeight(1)ForEach 参数说明参数说明第一个参数数据源数组this.diaries第二个参数子项生成函数接收item和index第三个参数键值生成函数用于 Diff 算法的唯一标识关键提示键值生成函数返回diary.id确保列表项的唯一性在数据更新时能精确匹配并高效更新 DOM。4.2 日记卡片组件BuilderDiaryCard(diary:DiaryInfo){Row({space:12}){// 左侧日期Column(){Text(diary.day).fontSize(28).fontWeight(FontWeight.Bold)Text(diary.monthYear).fontSize(12).fontColor(#999)}.width(60).alignItems(HorizontalAlign.Center)// 右侧内容Column({space:6}){Row({space:8}){Text(diary.weather)Text(diary.mood)}Text(diary.content).fontSize(14).maxLines(2).textOverflow({overflow:TextOverflow.Ellipsis})}.layoutWeight(1).alignItems(HorizontalAlign.Start)}.width(100%).padding(16).backgroundColor(#FFFFFF).borderRadius(12).shadow({radius:4,color:rgba(0,0,0,0.08)})}卡片设计要点左右布局日期信息在左内容预览在右层次分明阴影效果轻微阴影提升卡片立体感圆角设计12px 圆角符合现代 UI 风格文本截断maxLines(2)Ellipsis确保内容过长时优雅截断五、空状态处理当没有日记时展示友好的空状态提示if(this.diaries.length0){Column({space:16}){Image($r(app.media.empty)).width(120).height(120)Text(还没有日记点击 开始记录吧).fontSize(16).fontColor(#999)}.width(100%).height(100%).justifyContent(FlexAlign.Center)}else{// 正常列表展示}空状态设计原则提供视觉引导插图或图标文案友好引导用户操作居中布局视觉平衡六、导航跳转6.1 跳转到详情页privategoToDetail(id:string){router.pushUrl({url:pages/DiaryDetail,params:{id:id}})}6.2 跳转到编辑页privategoToEdit(){router.pushUrl({url:pages/DiaryEdit,params:{mode:create}})}路由参数传递通过params对象传递参数目标页面通过router.getParams()获取支持字符串、数字、对象等多种类型七、浮动按钮 FABButton(){Image($r(app.media.add)).width(28).height(28)}.width(56).height(56).backgroundColor(#007DFF).borderRadius(28).position({right:20,bottom:20}).shadow({radius:8,color:rgba(0,125,255,0.3)}).onClick((){this.goToEdit()})FAB 实现要点使用position绝对定位固定在右下角圆形按钮borderRadius 宽度的一半蓝色阴影增强浮动感醒目的图标引导用户操作八、下拉刷新Refresh({refreshing:$$this.isRefreshing}){List({space:12}){ForEach(this.diaries,(diary:DiaryInfo){ListItem(){this.DiaryCard(diary)}},(diary:DiaryInfo)diary.id)}}.onRefreshing((){this.loadDiaries()})九、性能优化9.1 懒加载对于大量日记数据可以使用LazyForEach替代ForEachLazyForEach(this.diaryDataSource,(diary:DiaryInfo){ListItem(){this.DiaryCard(diary)}},(diary:DiaryInfo)diary.id)9.2 数据分页privateasyncloadDiaries(page:number0,pageSize:number20){constallDiariesawaitthis.diaryStore.getAllDiaries()conststartpage*pageSizeconstendstartpageSizeconstpageDataallDiaries.slice(start,end)if(page0){this.diariespageData}else{this.diariesthis.diaries.concat(pageData)}}十、总结Index 页面作为应用的首页承担了数据展示和导航枢纽的双重职责。其核心设计要点包括声明式 UI通过State驱动界面自动更新Builder 复用日记卡片通过Builder实现代码复用生命周期管理在aboutToAppear和onPageShow中处理数据加载用户体验空状态、加载状态、下拉刷新等细节完善性能考量ForEach 键值、懒加载等优化手段这些模式在鸿蒙 ArkUI 开发中非常通用掌握它们可以快速构建高质量的列表页面。

相关新闻

自动驾驶大模型压缩技术:从原理到车端部署实践

自动驾驶大模型压缩技术:从原理到车端部署实践

1. 自动驾驶大模型压缩上车的必要性自动驾驶技术正在经历从传统模块化架构向端到端大模型的范式转变。BEV(Birds Eye View)感知、占用网络(Occupancy Networks)以及基于Transformer的端到端模型正在成为行业主流方案。然而&#x…

2026/10/6 23:46:37 阅读更多 →
Governed Agent:构建安全可控的LLM智能体架构实战

Governed Agent:构建安全可控的LLM智能体架构实战

如果你正在探索如何将大语言模型(LLM)安全、可控地集成到生产系统中,那么今天介绍的Governed Agent可能正是你需要的解决方案。传统的 LLM Agent 框架往往把决策权完全交给模型,导致输出不可预测、难以审计,甚至在敏感…

2026/10/12 6:18:12 阅读更多 →
AI重构研发协作:猪齿鱼3.0的端到端智能闭环实践

AI重构研发协作:猪齿鱼3.0的端到端智能闭环实践

1. 猪齿鱼3.0:AI重构研发协作新范式研发团队每天要处理大量重复性工作:需求录入、任务拆解、测试用例编写...这些"体力活"不仅消耗宝贵的人力资源,还因人工操作的不确定性带来质量风险。猪齿鱼3.0的突破在于,它用AI技术…

2026/10/10 19:28:51 阅读更多 →

最新新闻

收藏 | 2026年颠覆工作方式的AI编程(小白程序员必备)!TaoToken 统一 Key 接入 Claude Code 与 Codex 实战

收藏 | 2026年颠覆工作方式的AI编程(小白程序员必备)!TaoToken 统一 Key 接入 Claude Code 与 Codex 实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:23:11 阅读更多 →
Elsevier返修投稿踩坑分享:LaTeX编译tex转PDF的隐藏坑与TaoToken排查思路

Elsevier返修投稿踩坑分享:LaTeX编译tex转PDF的隐藏坑与TaoToken排查思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:23:10 阅读更多 →
Postgresql报错字段找不到?用TaoToken统一通道排查psycopg2.errors.UndefinedColumn的完整思路

Postgresql报错字段找不到?用TaoToken统一通道排查psycopg2.errors.UndefinedColumn的完整思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:23:10 阅读更多 →
驱动开发入门:从最小骨架到中断、并发与内存实战

驱动开发入门:从最小骨架到中断、并发与内存实战

《驱动之路》这套笔记,我从大半年前就开始准备了。真正动笔时,摆在面前的头一个问题并不是技术选型,而是“怎么开篇”。技术内容可以慢慢排,但作为整套内容的门面,这篇开篇得同时干两件事:一是自序&#xf…

2026/10/12 10:23:10 阅读更多 →
容器化 Claude Code 运行环境:Docker 镜像构建与 CI 环境一致性解决方案(TaoToken 统一 Key 接入版)

容器化 Claude Code 运行环境:Docker 镜像构建与 CI 环境一致性解决方案(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:23:10 阅读更多 →
完美立方问题详解:循环边界、枚举优化与浮点比较避坑指南

完美立方问题详解:循环边界、枚举优化与浮点比较避坑指南

前阵子刷某高校《计算机概论和程序设计基础》这门MOOC课程,循环练习那一节配了一道非常经典的题——完美立方。第一眼看过去真不难:枚举四个整数,判断立方等式成立就行。可真正动手才发现,题面里那些不起眼的限制条件,…

2026/10/12 10:22:09 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →