鸿蒙掌上驾考宝典应用开发15:答题交互组件——Exam 与 SelectComponent 全解析
第15篇答题交互组件——Exam 与 SelectComponent 全解析一、引言答题交互是驾考应用最核心的用户交互场景。DriverLicenseExam 项目的Exam组件和SelectComponent组件共同实现了完整的答题交互体验包括试题展示、选项选择、答案判断、答题卡、倒计时等。本文将深入解析这两个组件的实现。二、Exam 组件架构2.1 组件职责Exam 组件是考试页面的核心容器负责管理试题列表Swiper 滑动切换展示倒计时模拟考试管理答题卡浮层处理模拟考试结束弹窗2.2 组件接口// components/exam/src/main/ets/components/Exam.etsEntryComponentV2 export struct Exam {ParamRequireappPathStack: NavPathStack;// 路由栈ParamRequireexamManager: ExamManager;// 试卷数据ParammockExamCall: (score: number) void (score: number) {};// 模拟考试回调private examController: ExamController ExamController.instance;LocalremainTime: number 0;// 剩余时间LocalisShowProblemListSheet: boolean false;// 答题卡显示LocalcurrentIndex: number 0;// 当前第几题LocalisStop: boolean false;// 暂停状态private readonly renderWindowSize: number 2;// 渲染窗口大小}三、答题交互流程3.1 试题渲染build(){Column(){// 模拟考试倒计时this.showRemainTime();// 试题列表Swiper 滑动切换Swiper(examController.swiperController){ForEach(this.examManager.examDetails, (item: ExamDetail,examIndex:number) {Column({space: 12 }){if(this.shouldRenderQuestion(examIndex)) { SelectComponent({item: item,changeCorrectNum: (isAdd: boolean) {isAdd ? this.examManager.correctNumber: this.examManager.correctNumber--;},}); } } }); } // ... 底部导航答题卡、上一题、下一题 } }3.2 渲染窗口优化// 只渲染当前题附近的题目提高大题库性能privatereadonlyrenderWindowSize:number2;shouldRenderQuestion(examIndex:number):boolean{returnMath.abs(examIndex -this.currentIndex) this.renderWindowSize; }四、模拟考试倒计时4.1 倒计时实现aboutToAppear(): void {this.currentIndex this.examManager.currentQuestionId 1;if(this.examManager.timeLimit !0) {this.remainTime this.examManager.timeLimit *60; let showDialog: boolean true; setInterval(() {if(showDialog !this.isStop) {if(this.remainTime 1) {this.remainTime--; }else{ showDialog false;this.isStop true;this.examSubmitDialog.open(); } } },1000); } }4.2 时间格式化BuildershowRemainTime() {if(this.examManager.timeLimit!0) {Row() {Image($r(app.media.ic_time)).width(16).height(16);Text(${Math.floor(this.remainTime /60)}:${String(this.remainTime %60).padStart(2,0)}) .fontSize(14) .fontColor(#FF6B6B); } } }五、答题卡实现5.1 答题卡数据// 生成答题卡数据getanswerCardData() {returnthis.examManager.examDetails.map((item, index) ({index: index 1,status: item.isCorrectundefined?unanswered: item.isCorrect?correct:wrong,isCurrent: index this.currentIndex})); }5.2 答题卡交互// 底部打开答题卡浮层Button(答题卡) .onClick(() {this.isShowProblemListSheet true; }) .bindSheet($$this.isShowProblemListSheet,this.answerCardSheet(), { height:400, title: { title:答题卡}, });六、总结Exam 和 SelectComponent 组件的设计体现了 ArkUI 组件化的最佳实践职责分离Exam 管理流程SelectComponent 管理交互性能优化渲染窗口机制减少不必要的渲染状态管理Local 管理内部状态Param 接收外部数据用户体验倒计时、答题卡、弹窗等交互细节关键源码文件components/exam/src/main/ets/components/Exam.ets— 考试主组件components/exam/src/main/ets/components/SelectComponent.ets— 选择组件components/exam/src/main/ets/controller/ExamController.ets— 考试控制器

相关新闻

Trie 树的结构优化与字符串检索加速方法7

Trie 树的结构优化与字符串检索加速方法7

Trie 树的基本概念与结构介绍 Trie 树的基本定义和核心特性,包括节点结构、存储方式以及典型应用场景。经典 Trie 树的局限性分析传统 Trie 树在空间占用、查询效率等方面的不足,例如节点稀疏性、内存消耗高的问题。结构优化方法压缩 Trie(Ra…

2026/7/31 14:30:49 阅读更多 →
嵌入式Linux与Qt构建汽车智能中控:架构、实战与车规级开发全解析

嵌入式Linux与Qt构建汽车智能中控:架构、实战与车规级开发全解析

1. 项目概述:为什么选择嵌入式Linux与Qt构建汽车智能中控? 如果你正在考虑或已经着手开发一款汽车智能中控系统,那么“嵌入式Linux Qt”这个技术组合,大概率已经进入了你的视野。这并非偶然,而是由汽车电子领域对成本…

2026/7/31 14:30:49 阅读更多 →
C++项目集成FFmpeg:从环境配置到音视频处理核心流程详解

C++项目集成FFmpeg:从环境配置到音视频处理核心流程详解

1. 项目概述:为什么要在C项目中集成FFmpeg? 如果你正在用C开发一个需要处理音视频的应用,无论是播放器、编辑器、直播推流工具,还是简单的格式转换器,那么“集成FFmpeg”几乎是一个绕不开的话题。这个标题“C高级编程&…

2026/7/31 14:30:49 阅读更多 →

最新新闻

AIO-Switch-Updater终极指南:Switch自定义固件一键更新完整教程 [特殊字符]

AIO-Switch-Updater终极指南:Switch自定义固件一键更新完整教程 [特殊字符]

AIO-Switch-Updater终极指南:Switch自定义固件一键更新完整教程 🎮 【免费下载链接】aio-switch-updater Update your CFW, cheat codes, firmwares and more directly from your Nintendo Switch! 项目地址: https://gitcode.com/gh_mirrors/ai/aio-s…

2026/7/31 22:41:08 阅读更多 →
前端性能优化的季度总结:哪些带来了实质提升、哪些只是数字游戏#

前端性能优化的季度总结:哪些带来了实质提升、哪些只是数字游戏#

前端性能优化的季度总结:哪些带来了实质提升、哪些只是数字游戏# 一、当性能评分成了「数字游戏」 过去三个月,在产品上做了十几次性能优化——有的让真实用户的留存率提升了,有的只让 Lighthouse 评分涨了几分,但用户端感知不到…

2026/7/31 22:41:08 阅读更多 →
二阶锥松弛在配电网最优潮流计算中的高效应用

二阶锥松弛在配电网最优潮流计算中的高效应用

1. 项目背景与核心价值配电网最优潮流(Optimal Power Flow, OPF)是电力系统运行与规划中的关键计算问题。传统交流最优潮流(ACOPF)属于非凸非线性规划问题,求解难度大且计算效率低。二阶锥松弛(Second-Orde…

2026/7/31 22:41:08 阅读更多 →
八月 AI 功能迭代路线图:基于七月数据的决策复盘

八月 AI 功能迭代路线图:基于七月数据的决策复盘

八月 AI 功能迭代路线图:基于七月数据的决策复盘 一、当路线图开始「基于数据」而不是「基于感觉」 七月末,独立产品的 AI 功能迭代,到了一个值得记录的转折点:路线规划开始从「基于感觉」转向「基于实际使用数据」。 六月时&a…

2026/7/31 22:41:08 阅读更多 →
editdistance进阶技巧:eval_criterion函数实现高效阈值过滤

editdistance进阶技巧:eval_criterion函数实现高效阈值过滤

editdistance进阶技巧:eval_criterion函数实现高效阈值过滤 【免费下载链接】editdistance Fast implementation of the edit distance(Levenshtein distance) 项目地址: https://gitcode.com/gh_mirrors/ed/editdistance 在文本处理和数据清洗任务中&#x…

2026/7/31 22:41:08 阅读更多 →
并发日志策略:Loguru多线程与异步日志安全实践指南

并发日志策略:Loguru多线程与异步日志安全实践指南

并发日志策略:Loguru多线程与异步日志安全实践指南 【免费下载链接】loguru Python logging made (stupidly) simple 项目地址: https://gitcode.com/gh_mirrors/lo/loguru 在现代Python应用开发中,并发编程已成为常态。无论是Web服务器处理海量请…

2026/7/31 22:40:07 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻