本系列第 2/8 课,建议 45–60 分钟(估算)。先完成上一课。
这课解决什么
一张卡片是一个字典,题目、答案、分类是字段,ID 是身份。列表负责排列多张卡片;字典字段通过名字读,新增字段不需要整体挪索引。
先预测,再运行
两个题目相同但 ID 不同的卡片,是同一条记录吗?
先记下自己的答案,运行起始工程与完成工程比较;答案见文末。
开始实战
以上一课完成工程为起点,先导入并运行,再另存为本课作业。
完成工程可以查看答案;独立作业请保留自己的修改。
新增或调整的组件
| 实例名 | 组件 | 本课配置 |
|---|---|---|
标签_标题 |
标签 | Width=Fill parent;FontSize=24;TextColor=#183153;Text=知识卡片 · 第 2课 |
逐步搭建
- 将并行列表改为卡片字典列表,字段为 id/question/answer/category/wrong。
- 刷新遍历卡片,显示标题,同时保存显示记录列表。
- 选中后先在显示列表找卡片,再读答案字段。
- 画出“卡片列表→某项字典→answer”的结构图,确认顶层不是一个大文本。

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。
核心积木与数据流
下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。
global 显示 = []
global 选中ID = 0
when 列表显示框_卡片.AfterPicking() {
var i = 列表显示框_卡片.SelectionIndex
if i >= 1 and i <= length(显示) {
var 项 = 显示[i]
选中ID = dictget(项,"id",0)
标签_详情.Text = dictget(项,"answer","")
}
}
中途检查与排错
本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。
- 按索引读取详情。
排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。
当前课仅实现表中对应功能,导出和备份在第八课加入。SQLite 在第六课加入,本课仍使用列表或 TinyDB。
两个理解题与独立改造
- 两个题目相同但 ID 不同的卡片,是同一条记录吗?
- 字典新增字段会改变原有 answer 的取值位置吗?
独立改造: 增加 source 字段,在详情里显示来源。
先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。
查看预测与练习参考答案
预测: 不是。题目是内容,ID 是身份;修改题目不会产生新身份。
追踪: 按键名读取不依赖字段顺序,新增字段不会挪动旧字段的语义。
改造思路: 给每张字典添加 source;读取时提供默认值以兼容旧卡片。字段变化不改变 id。
完成与下一步
保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。
扫码添加客服咨询