鸿蒙掌上驾考宝典应用开发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/10/17 8:42:37 阅读更多 →
嵌入式Linux与Qt构建汽车智能中控:架构、实战与车规级开发全解析

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

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

2026/10/18 0:55:58 阅读更多 →
C++项目集成FFmpeg:从环境配置到音视频处理核心流程详解

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

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

2026/10/17 8:45:57 阅读更多 →

最新新闻

显存不够怎么办:HERO-35B-A3B-i1-GGUF用7.6GB跑起35B大模型的极限技巧

显存不够怎么办:HERO-35B-A3B-i1-GGUF用7.6GB跑起35B大模型的极限技巧

【免费下载链接】HERO-35B-A3B-i1-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/mradermacher/HERO-35B-A3B-i1-GGUF 点击查看 免费下载 显存不够,还想本地跑35B大模型?HERO-35B-A3B-i1-GGUF 就是为你准备的。这个项目提供了一套完整的…

2026/10/19 1:56:24 阅读更多 →
【AI智能体】Langchain 结构化输出结果实战操作详解

【AI智能体】Langchain 结构化输出结果实战操作详解

目录 一、前言 二、Langchain 结构化输出介绍 2.1 什么是结构化输出 2.2 传统方式 vs 结构化输出 2.3 结构化输出模式 三、四种结构化输出格式使用 3.1 Pydantic 使用 3.1.1 基本使用 3.1.2 设置枚举类型 3.1.3 列表提取 3.1.4 嵌套结构 3.1.5 限制条件 3.2 TypedD…

2026/10/19 1:56:24 阅读更多 →
日记提示词:用结构化提问开启情绪疗愈与自我探索

日记提示词:用结构化提问开启情绪疗愈与自我探索

我身边不少朋友知道我有长期写日记的习惯,常来问我同一个问题:“日记到底怎么才能坚持写下去?”更常见的是:“我试过,翻开头一天写的内容,全是‘今天工作好累,吃了外卖’‘睡晚了’,…

2026/10/19 1:56:24 阅读更多 →
ArtCraft:Rust + Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图

ArtCraft:Rust + Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图

ArtCraft:Rust Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图 【免费下载链接】artcraft ArtCraft is an intentional crafting engine for artists, designers, and filmmakers 项目地址: https://gitcode.com/GitHub_Trending…

2026/10/19 1:56:24 阅读更多 →
10 分钟录音练出 AI 变声模型:RVC WebUI 完整实战

10 分钟录音练出 AI 变声模型:RVC WebUI 完整实战

10 分钟录音练出 AI 变声模型&#xff1a;RVC WebUI 完整实战 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-…

2026/10/19 1:56:24 阅读更多 →
固态硬盘DRAM缓存有什么用?从原理到选购一次讲清

固态硬盘DRAM缓存有什么用?从原理到选购一次讲清

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

2026/10/19 1:55:24 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →