问题描述
用户问:”在app inventor2中 积木方块(获取启动值)在哪个位置?”
获取启动值的位置
积木块位置
Blocks Editor → Control 积木块分类 → 最底部
具体路径:
- 点击左侧 “Control” 分类
- 向下滚动到底部
- 找到 “get start value”(获取启动值)
相关积木块
| 积木块 | 位置 | 说明 |
|---|---|---|
| 获取启动值 | Control | 获取传入的值 |
| 获取起始值 | Control | 同上(旧版翻译) |
| 打开另一个屏幕并传值 | Control | 跳转并传值 |
| 关闭屏幕并传值 | Control | 返回并传值 |
| 其他屏幕关闭 | Control | 接收返回值 |
用法详解
Screen1发送数据
当 按钮_跳转.被点击
设 传递数据 = "你好,这是来自Screen1的数据"
调用 打开另一个屏幕并传值("Screen2", 传递数据)
Screen2接收数据
当 Screen2.初始化()
设 收到的数据 = 获取启动值()
如果 收到的数据 ≠ ""
标签_显示.文本 = "收到:" & 收到的数据
否则
标签_显示.文本 = "没有收到数据"
传递复杂数据
可以传递列表、字典等复杂数据:
' 传递字典
设 用户信息 = 创建字典(
"name" → "张三",
"age" → 25,
"score" → 95
)
调用 打开另一个屏幕并传值("Screen2", 用户信息)
' Screen2接收
当 Screen2.初始化()
设 数据 = 获取启动值()
设 姓名 = 从字典 数据 获取 "name"
设 年龄 = 从字典 数据 获取 "age"
标签_信息.文本 = 姓名 & "," & 年龄 & "岁"
传递列表
设 选中的项目 = ["苹果", "香蕉", "橙子"]
调用 打开另一个屏幕并传值("Screen_List", 选中的项目)
' 接收端
当 Screen_List.初始化()
设 列表 = 获取启动值()
设 ListView1.元素 = 列表
返回数据
Screen2返回数据
当 按钮_确认.被点击
设 返回值 = 输入框_输入.文本
调用 关闭屏幕并传值(返回值)
Screen1接收返回数据
当 Screen1.其他屏幕关闭(屏幕名, 返回值)
如果 屏幕名 = "Screen2"
标签_返回.文本 = "Screen2返回:" & 返回值
完整流程图
Screen1 Screen2
| |
|-- 打开另一个屏幕并传值(数据) -->|
| |-- 获取启动值() → 收到数据
| | (处理数据)
| |
|<-- 关闭屏幕并传值(返回值) -----|
|-- 其他屏幕关闭事件 |
| (处理返回值) |
常见问题
Q1: 获取启动值返回空字符串?
- 确保使用了”打开另一个屏幕并传值“(不是”打开另一个屏幕”)
- 检查传值的变量是否有内容
- 确认在Screen.Initialize中调用(不是在其他事件中)
Q2: 可以在非Initialize事件中获取吗?
可以,”获取启动值”是一个函数,可以在任何时候调用。但通常在Initialize中获取并保存到变量。
Q3: 传递的数据大小有限制吗?
建议传递较小的数据(字符串、小列表)。大数据建议用TinyDB中转。
总结
| 积木块 | 用途 | 位置 |
|---|---|---|
| 获取启动值 | 接收传入数据 | Control分类底部 |
| 打开另一个屏幕并传值 | 跳转+传数据 | Control分类 |
| 关闭屏幕并传值 | 返回+传数据 | Control分类 |
| 其他屏幕关闭 | 接收返回数据 | Screen事件 |
版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。
扫码添加客服咨询