数据结构与本地数据库 01:列表与详情:先看懂数据位置

课程首页 · 全部知识课程 · 返回专题主页

本系列第 1/8 课,建议 45–60 分钟(估算)。基础课程可零基础开始;另外两个系列建议先完成编程基础。

下载本课完成工程 .aia

这课解决什么

本课用两个等长列表分别保存题目和答案,相同索引表示同一张卡片。先理解列表从 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=尚未选择卡片

逐步搭建

  1. 创建列表显示框_卡片和标签_详情。
  2. 全局题目和答案各放两项,Screen1.Initialize 把题目设给列表。
  3. AfterPicking 读取 SelectionIndex,检查 1≤索引≤答案长度后才取值。
  4. 点击第二项显示“1”;构造空列表并观察无选中项时不会读取越界。

知识卡片与错题库第1课运行状态布局预览

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。

核心积木与数据流

下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。

global 答案 = list("按资料的年代字段排序", "1")



when 列表显示框_卡片.AfterPicking() {
var i = 列表显示框_卡片.SelectionIndex
if i >= 1 and i <= length(答案) { 标签_详情.Text = 答案[i] }
}

中途检查与排错

本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。

  1. 按索引读取详情。

排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。

当前课仅实现表中对应功能,导出和备份在第八课加入。SQLite 在第六课加入,本课仍使用列表或 TinyDB。

两个理解题与独立改造

  1. 选中第二条会读答案[0]、[1]还是[2]?
  2. 列表边界检查是在修复两张列表错位吗?

独立改造: 增加第三张卡片;再故意只增加题目,说明什么地方会出错。

先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。

查看预测与练习参考答案

预测: 答案[2];App Inventor 列表从 1 开始。

追踪: 它只防越界,不修复数据关联;题目与答案需要同索引或改用字典。

改造思路: 两个列表需要同位置配对。只增加题目会令答案长度不足;保留边界检查,但应修复数据模型而不只是忽略第三项。

完成与下一步

保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。

下一课:字典描述卡片,ID 表示身份

文档反馈