本系列第 1/8 课,建议 45–60 分钟(估算)。基础课程可零基础开始;另外两个系列建议先完成编程基础。
这课解决什么
本课用两个等长列表分别保存题目和答案,相同索引表示同一张卡片。先理解列表从 1 开始,再讨论这种按位置关联的局限。
先预测,再运行
选中第二条会读答案[0]、[1]还是[2]?
先记下自己的答案,运行起始工程与完成工程比较;答案见文末。
开始实战
从空白工程开始,按下表拖入组件;也可先导入完成工程预测行为,再回到空白工程独立搭建。
完成工程可以查看答案;独立作业请保留自己的修改。
新增或调整的组件
| 实例名 | 组件 | 本课配置 |
|---|---|---|
标签_标题 |
标签 | Width=Fill parent;FontSize=24;TextColor=#183153;Text=知识卡片 · 第 1课 |
标签_状态 |
标签 | Width=Fill parent;FontSize=16;TextColor=#183153;Text=点击列表查看答案 |
列表显示框_卡片 |
列表显示框 | Height=180;Width=Fill parent |
标签_详情 |
标签 | Width=Fill parent;FontSize=16;TextColor=#183153;Text=尚未选择卡片 |
逐步搭建
- 创建列表显示框_卡片和标签_详情。
- 全局题目和答案各放两项,Screen1.Initialize 把题目设给列表。
- AfterPicking 读取 SelectionIndex,检查 1≤索引≤答案长度后才取值。
- 点击第二项显示“1”;构造空列表并观察无选中项时不会读取越界。

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。
核心积木与数据流
下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。
global 答案 = list("按资料的年代字段排序", "1")
when 列表显示框_卡片.AfterPicking() {
var i = 列表显示框_卡片.SelectionIndex
if i >= 1 and i <= length(答案) { 标签_详情.Text = 答案[i] }
}
中途检查与排错
本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。
- 按索引读取详情。
排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。
当前课仅实现表中对应功能,导出和备份在第八课加入。SQLite 在第六课加入,本课仍使用列表或 TinyDB。
两个理解题与独立改造
- 选中第二条会读答案[0]、[1]还是[2]?
- 列表边界检查是在修复两张列表错位吗?
独立改造: 增加第三张卡片;再故意只增加题目,说明什么地方会出错。
先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。
查看预测与练习参考答案
预测: 答案[2];App Inventor 列表从 1 开始。
追踪: 它只防越界,不修复数据关联;题目与答案需要同索引或改用字典。
改造思路: 两个列表需要同位置配对。只增加题目会令答案长度不足;保留边界检查,但应修复数据模型而不只是忽略第三项。
完成与下一步
保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。
扫码添加客服咨询