App Inventor 2 控制æµç§¯æœ¨å®žæˆ˜ï¼šä»Žåˆ†æ”¯åˆ¤æ–到多å±å作,构建会æ€è€ƒçš„Appåˆšå¦ App Inventor 2 那会儿,我åšè¿‡ä¸€ä¸ªè®¡ç®—器:两个数å—è¿ç®—符→显示结果,塞进一个 Screen é‡Œå®Œäº‹ã€‚åŽæ¥å¼€å§‹åšå¤æ‚ç‚¹çš„ä¸œè¥¿â€”â€”ç™»å½•æ ¡éªŒã€åˆ†é¡µæŸ¥è¯¢ã€ç”题计时——代ç çªç„¶å°±å˜æˆäº†ä¸€å›¢ä¹±éº»ã€‚直到我把 Control 积木(控制æµï¼‰çš„系统摸é€ï¼Œæ‰æ˜Žç™½é—®é¢˜å‡ºåœ¨å“ªï¼šä¸æ˜¯åŠŸèƒ½å¤ªå¤æ‚,而是ä¸çŸ¥é“选对控制结构。这篇教程é¢å‘å·²ç»èƒ½æ‹¼åŸºç¡€ç§¯æœ¨ï¼Œä½†æƒ³å†™å‡ºæ›´å¥å£®ã€æ›´æ¨¡å—化代ç 的开å‘è€ã€‚—## ä½ ä¼šå¦åˆ°ä»€ä¹ˆ- 用if/else if处ç†å¤šæ¡ä»¶åˆ†æ”¯çš„æ£ç¡®å§¿åŠ¿-for rangeã€for eachã€for each with key三ç§å¾ªçޝå„自的最佳使用场景-while break组åˆå®žçŽ°çµæ´»çš„é‡å¤é€»è¾‘- 多å±å¹•å作的推èä¼ å€¼æ¨¡å¼-do with resultå’Œevaluate but ignore result两个特殊积木的巧用—## 控制æµç§¯æœ¨å››å¤§ç±»App Inventor 2 的控制æµç§¯æœ¨æ”¾åœ¨å†ç½®å—颿¿æœ€é¡¶ä¸Šï¼Œåˆ†ä¸ºå››å¤§ç±»ï¼š| 类别 | 积木 | 用途 ||------|------|------|| æ¡ä»¶åˆ¤æ– | if then / if then else / if else if / choose(三åƒï¼‰ | æ ¹æ®æ¡ä»¶èµ°ä¸åŒåˆ†æ”¯ || 循环è¿ä»£ | for range / for each / for each with key / while / break | é‡å¤æ‰§è¡Œä¸€æ®µé€»è¾‘ || å±å¹•导航 | open another screen / close screen / get start value / close screen with value | 多å±å¹•ä¹‹é—´çš„è·³è½¬ä¸Žä¼ å€¼ || è¾åŠ©å·¥å· | do with result / evaluate but ignore result | å†è”è®¡ç®—ä¸Žå‰¯ä½œç”¨å¤„ç† | åˆå¦è€æœ€å¸¸è§çš„误区:把所有逻辑写在一个事件处ç†å—里,然åŽç”¨ä¸ƒå«ä¸ªåµŒå¥— if。æ£ç¡®çš„åšæ³•是åˆé€‰æŽ§åˆ¶ç»“构,å†å†™ä¸šåŠ¡é€»è¾‘â€”â€”å°±åƒç›–房ååˆææ¡†æž¶å†ç Œå¢™ã€‚—## 实战:用ç¾åˆ°Appä¸²è”æ‰€æœ‰æŽ§åˆ¶æµç§¯æœ¨### Step 1: 用if/else ifæ ¡éªŒç¾åˆ°ç ç¾åˆ°è§„则:æ£ç¡®ç “AIA2026” → æˆåŠŸï¼›ç©ºè¾“å¥ â†’ æç¤ºä¸èƒ½ä¸ºç©ºï¼›é”™è¯¯ç → æç¤ºé”™è¯¯ï¼Œè¯·é‡è¯•。å³é”®åœ¨äºŽif/else ifçš„ mutator 坿‰©å±•出多个 else if 分支,判æ–逻辑从上到下é€ä¸€æµ‹è¯•,ʊ一旦æŸä¸ªæ¡ä»¶ä¸ºçœŸï¼ŒåŽç»å¨éƒ¨è·³è¿‡ã€‚æ‰€ä»¥ä¼˜åˆæŠŠå¼‚å¸¸æ¡ä»¶æ”¾åœ¨å‰é¢ã€‚### Step 2: 用for each with keyé历ç¾åˆ°è®°å½•生æˆè€ƒå‹¤æŠ¥å‘Šç¾åˆ°æ•°æ®å˜åœ¨ TinyDB 里(键å¦å·ï¼Œå€¼çжæ€ï¼‰ã€‚用for each with keyåŒæ—¶æ‹¿åˆ°é”®å’Œå€¼ï¼Œä¸€æ¡å¾ªçޝå°èƒ½ç»Ÿè®¡å‡ºç¾åˆ°äººæ•°å’Œå‡ºå‹¤çŽ‡ã€‚å¯¹æ¯”ä¸‰ç§å¾ªçŽ¯ï¼š**-for range:需手动索引 select list item,代ç 冗长-for each:直接拿åƒç´ 值,适åˆåˆ—表é历-for each with key:键值åŒå–,适åˆå—å¸é历推è顺åºï¼šèƒ½ç”¨for each就别用for range。### Step 3: 用whilebreakå®žçŽ°é™æ—¶ç¾åˆ°ç¾åˆ°çª—å£å¼€æ”¾ 60 ç§’ï¼Œè¶æ—¶è‡ªåЍå³é—。使用 Clock 组件设 1 秒间隔递å‡è®¡æ•°å™¨ï¼Œå‰©ä½™ 10 ç§’æ—¶å˜çº¢æç¤ºï¼Œåˆ° 0 æ—¶å³é—ç¾åˆ°å¥å£ã€‚âš ï¸ æ³¨æ„:breakåªèƒ½æ”¾åœ¨å¾ªçޝ体å†ï¼Œä¸èƒ½ç”¨åœ¨ Clock çš„ Timer 事件ä¸ã€‚åœæ¢è®¡æ—¶å™¨åº”该用TimerEnabled false。### Step 4: 多å±åä½œä¼ å€¼ç‚¹å‡»è€ƒå‹¤æŠ¥å‘Šä¸çš„æŸä½å¦ç”Ÿ →open another screen with start valueä¼ å¥å¦å· → 详æƒé¡µç”¨get start value接收 → 查看完毕åŽclose screen with value返回主å±ã€‚ 🔄close screen with value→get start value是多å±åä½œæ ‡å‡†æ¨¡å¼ã€‚close screen with value会释放被å³é—å±å¹•çš„å†å˜ï¼Œæ¯”é‡å¤ open æ›´çœèµ„æºã€‚å±å¹•æ ˆè¶è¿‡ 5 层时务å¿ç”¨è¿™ç§æ¨¡å¼ã€### Step 5: 用do with result精简一次性计算算出勤率这ç§åªç”¨ä¸€æ¬¡çš„ä¸é—´è®¡ç®—,用do with result比å•独定义过程更轻é‡ã€‚代ç 紧跟在赋值è¯å¥é‡Œï¼Œé˜è¯»èµ·æ¥æ›´æµç•。åŒç†ï¼Œevaluate but ignore result适åˆè°ƒç”¨æœ‰è¿”回值但当å‰ä¸éœ€è¦è¿™ä¸ªå€¼çš„场景(如记录日志)。—## 常è§å‘点速查1. **å±å¹•é—´ä¼ å€¼ç”¨get start valueï¼Œä¸æ˜¯get plain start text**:åŽè€æ˜¯ä¸ºå¤–部 Android Activity å‡†å¤‡çš„ï¼Œç”¨é”™ä¼šå¯¼è‡´å¤æ‚æ•°æ®ç±»åž‹ä¸¢å¤±2.for range循环å˜é‡åªè¯»ï¼šä¸è¦åœ¨å¾ªçޝ体ä¸ä¿®æ”¹å˜é‡å€¼ï¼Œä¸ä¼šç”Ÿæ•ˆ3.choose返回的是值,if then else控制的是æµç¨‹ï¼šå‰è€é€‚åˆèµ‹å€¼è¡¨è¾¾å¼å†åšæ¡ä»¶é€‰æ‹©4.open å±å¹•å¿é¡»æé close:å¦åˆ™ä¼šå†å˜æ³„æ¼ï¼Œè½»åˆ™å¡é¡¿ï¼Œé‡åˆ™ OOM—## 总结| 场景 | 推è积木 | ç†ç”± ||------|---------|------|| 多æ¡ä»¶åˆ†æ”¯ï¼ˆ3~5 个) |if/else if(mutator 扩展) | æ¸æ™°ï¼Œè·³å‡ºåŠæ—¶ || é历列表 |for each| æ— ç´¢å¼•ï¼Œä»£ç 简练 || é历å—å¸ |for each with key| 键值åŒå– || æ¡ä»¶é©±åŠ¨çš„é‡å¤ |while 手动å˜é‡ | çµæ´»å¯æŽ§ || 一次性的å†éƒ¨è®¡ç®— |do with result| å开过程 || 多å±ä¼ 值 |open/close screen with value| çœå†å˜ï¼Œä¼ 夿‚值 |ä¸‹æ¬¡å†™ä»£ç æ—¶ï¼ŒèŠ±ä¸‰ç§’é’Ÿæƒ³æ¸æ¥šï¼šè¿™ä¸ªé€»è¾‘适åƒå“ªç§æŽ§åˆ¶ç»“构?选对了,代ç é‡ç›´æŽ¥å‡åŠï¼Œbug 也少一åŠã€‚—### 📚 å‚考资料- 📄 控制æµç§¯æœ¨å®Œæ•´æ–‡æ¡£ï¼šhttps://www.fun123.cn/reference/blocks/control.html- ðŸ App Inventor 2 䏿–‡ç½‘:https://www.fun123.cn
App Inventor 2 控制流积木实战:从分支判断到多屏协作,构建“会思考“的App
发布时间:2026/7/8 7:34:58
App Inventor 2 控制æµç§¯æœ¨å®žæˆ˜ï¼šä»Žåˆ†æ”¯åˆ¤æ–到多å±å作,构建会æ€è€ƒçš„Appåˆšå¦ App Inventor 2 那会儿,我åšè¿‡ä¸€ä¸ªè®¡ç®—器:两个数å—è¿ç®—符→显示结果,塞进一个 Screen é‡Œå®Œäº‹ã€‚åŽæ¥å¼€å§‹åšå¤æ‚ç‚¹çš„ä¸œè¥¿â€”â€”ç™»å½•æ ¡éªŒã€åˆ†é¡µæŸ¥è¯¢ã€ç”题计时——代ç çªç„¶å°±å˜æˆäº†ä¸€å›¢ä¹±éº»ã€‚直到我把 Control 积木(控制æµï¼‰çš„系统摸é€ï¼Œæ‰æ˜Žç™½é—®é¢˜å‡ºåœ¨å“ªï¼šä¸æ˜¯åŠŸèƒ½å¤ªå¤æ‚,而是ä¸çŸ¥é“选对控制结构。这篇教程é¢å‘å·²ç»èƒ½æ‹¼åŸºç¡€ç§¯æœ¨ï¼Œä½†æƒ³å†™å‡ºæ›´å¥å£®ã€æ›´æ¨¡å—化代ç 的开å‘è€ã€‚—## ä½ ä¼šå¦åˆ°ä»€ä¹ˆ- 用if/else if处ç†å¤šæ¡ä»¶åˆ†æ”¯çš„æ£ç¡®å§¿åŠ¿-for rangeã€for eachã€for each with key三ç§å¾ªçޝå„自的最佳使用场景-while break组åˆå®žçŽ°çµæ´»çš„é‡å¤é€»è¾‘- 多å±å¹•å作的推èä¼ å€¼æ¨¡å¼-do with resultå’Œevaluate but ignore result两个特殊积木的巧用—## 控制æµç§¯æœ¨å››å¤§ç±»App Inventor 2 的控制æµç§¯æœ¨æ”¾åœ¨å†ç½®å—颿¿æœ€é¡¶ä¸Šï¼Œåˆ†ä¸ºå››å¤§ç±»ï¼š| 类别 | 积木 | 用途 ||------|------|------|| æ¡ä»¶åˆ¤æ– | if then / if then else / if else if / choose(三åƒï¼‰ | æ ¹æ®æ¡ä»¶èµ°ä¸åŒåˆ†æ”¯ || 循环è¿ä»£ | for range / for each / for each with key / while / break | é‡å¤æ‰§è¡Œä¸€æ®µé€»è¾‘ || å±å¹•导航 | open another screen / close screen / get start value / close screen with value | 多å±å¹•ä¹‹é—´çš„è·³è½¬ä¸Žä¼ å€¼ || è¾åŠ©å·¥å· | do with result / evaluate but ignore result | å†è”è®¡ç®—ä¸Žå‰¯ä½œç”¨å¤„ç† | åˆå¦è€æœ€å¸¸è§çš„误区:把所有逻辑写在一个事件处ç†å—里,然åŽç”¨ä¸ƒå«ä¸ªåµŒå¥— if。æ£ç¡®çš„åšæ³•是åˆé€‰æŽ§åˆ¶ç»“构,å†å†™ä¸šåŠ¡é€»è¾‘â€”â€”å°±åƒç›–房ååˆææ¡†æž¶å†ç Œå¢™ã€‚—## 实战:用ç¾åˆ°Appä¸²è”æ‰€æœ‰æŽ§åˆ¶æµç§¯æœ¨### Step 1: 用if/else ifæ ¡éªŒç¾åˆ°ç ç¾åˆ°è§„则:æ£ç¡®ç “AIA2026” → æˆåŠŸï¼›ç©ºè¾“å¥ â†’ æç¤ºä¸èƒ½ä¸ºç©ºï¼›é”™è¯¯ç → æç¤ºé”™è¯¯ï¼Œè¯·é‡è¯•。å³é”®åœ¨äºŽif/else ifçš„ mutator 坿‰©å±•出多个 else if 分支,判æ–逻辑从上到下é€ä¸€æµ‹è¯•,ʊ一旦æŸä¸ªæ¡ä»¶ä¸ºçœŸï¼ŒåŽç»å¨éƒ¨è·³è¿‡ã€‚æ‰€ä»¥ä¼˜åˆæŠŠå¼‚å¸¸æ¡ä»¶æ”¾åœ¨å‰é¢ã€‚### Step 2: 用for each with keyé历ç¾åˆ°è®°å½•生æˆè€ƒå‹¤æŠ¥å‘Šç¾åˆ°æ•°æ®å˜åœ¨ TinyDB 里(键å¦å·ï¼Œå€¼çжæ€ï¼‰ã€‚用for each with keyåŒæ—¶æ‹¿åˆ°é”®å’Œå€¼ï¼Œä¸€æ¡å¾ªçޝå°èƒ½ç»Ÿè®¡å‡ºç¾åˆ°äººæ•°å’Œå‡ºå‹¤çŽ‡ã€‚å¯¹æ¯”ä¸‰ç§å¾ªçŽ¯ï¼š**-for range:需手动索引 select list item,代ç 冗长-for each:直接拿åƒç´ 值,适åˆåˆ—表é历-for each with key:键值åŒå–,适åˆå—å¸é历推è顺åºï¼šèƒ½ç”¨for each就别用for range。### Step 3: 用whilebreakå®žçŽ°é™æ—¶ç¾åˆ°ç¾åˆ°çª—å£å¼€æ”¾ 60 ç§’ï¼Œè¶æ—¶è‡ªåЍå³é—。使用 Clock 组件设 1 秒间隔递å‡è®¡æ•°å™¨ï¼Œå‰©ä½™ 10 ç§’æ—¶å˜çº¢æç¤ºï¼Œåˆ° 0 æ—¶å³é—ç¾åˆ°å¥å£ã€‚âš ï¸ æ³¨æ„:breakåªèƒ½æ”¾åœ¨å¾ªçޝ体å†ï¼Œä¸èƒ½ç”¨åœ¨ Clock çš„ Timer 事件ä¸ã€‚åœæ¢è®¡æ—¶å™¨åº”该用TimerEnabled false。### Step 4: 多å±åä½œä¼ å€¼ç‚¹å‡»è€ƒå‹¤æŠ¥å‘Šä¸çš„æŸä½å¦ç”Ÿ →open another screen with start valueä¼ å¥å¦å· → 详æƒé¡µç”¨get start value接收 → 查看完毕åŽclose screen with value返回主å±ã€‚ 🔄close screen with value→get start value是多å±åä½œæ ‡å‡†æ¨¡å¼ã€‚close screen with value会释放被å³é—å±å¹•çš„å†å˜ï¼Œæ¯”é‡å¤ open æ›´çœèµ„æºã€‚å±å¹•æ ˆè¶è¿‡ 5 层时务å¿ç”¨è¿™ç§æ¨¡å¼ã€### Step 5: 用do with result精简一次性计算算出勤率这ç§åªç”¨ä¸€æ¬¡çš„ä¸é—´è®¡ç®—,用do with result比å•独定义过程更轻é‡ã€‚代ç 紧跟在赋值è¯å¥é‡Œï¼Œé˜è¯»èµ·æ¥æ›´æµç•。åŒç†ï¼Œevaluate but ignore result适åˆè°ƒç”¨æœ‰è¿”回值但当å‰ä¸éœ€è¦è¿™ä¸ªå€¼çš„场景(如记录日志)。—## 常è§å‘点速查1. **å±å¹•é—´ä¼ å€¼ç”¨get start valueï¼Œä¸æ˜¯get plain start text**:åŽè€æ˜¯ä¸ºå¤–部 Android Activity å‡†å¤‡çš„ï¼Œç”¨é”™ä¼šå¯¼è‡´å¤æ‚æ•°æ®ç±»åž‹ä¸¢å¤±2.for range循环å˜é‡åªè¯»ï¼šä¸è¦åœ¨å¾ªçޝ体ä¸ä¿®æ”¹å˜é‡å€¼ï¼Œä¸ä¼šç”Ÿæ•ˆ3.choose返回的是值,if then else控制的是æµç¨‹ï¼šå‰è€é€‚åˆèµ‹å€¼è¡¨è¾¾å¼å†åšæ¡ä»¶é€‰æ‹©4.open å±å¹•å¿é¡»æé close:å¦åˆ™ä¼šå†å˜æ³„æ¼ï¼Œè½»åˆ™å¡é¡¿ï¼Œé‡åˆ™ OOM—## 总结| 场景 | 推è积木 | ç†ç”± ||------|---------|------|| 多æ¡ä»¶åˆ†æ”¯ï¼ˆ3~5 个) |if/else if(mutator 扩展) | æ¸æ™°ï¼Œè·³å‡ºåŠæ—¶ || é历列表 |for each| æ— ç´¢å¼•ï¼Œä»£ç 简练 || é历å—å¸ |for each with key| 键值åŒå– || æ¡ä»¶é©±åŠ¨çš„é‡å¤ |while 手动å˜é‡ | çµæ´»å¯æŽ§ || 一次性的å†éƒ¨è®¡ç®— |do with result| å开过程 || 多å±ä¼ 值 |open/close screen with value| çœå†å˜ï¼Œä¼ 夿‚值 |ä¸‹æ¬¡å†™ä»£ç æ—¶ï¼ŒèŠ±ä¸‰ç§’é’Ÿæƒ³æ¸æ¥šï¼šè¿™ä¸ªé€»è¾‘适åƒå“ªç§æŽ§åˆ¶ç»“构?选对了,代ç é‡ç›´æŽ¥å‡åŠï¼Œbug 也少一åŠã€‚—### 📚 å‚考资料- 📄 控制æµç§¯æœ¨å®Œæ•´æ–‡æ¡£ï¼šhttps://www.fun123.cn/reference/blocks/control.html- ðŸ App Inventor 2 䏿–‡ç½‘:https://www.fun123.cn