Alert 繼承自 Screen,用於通知使用者錯誤或資訊。MIDP 1.0 中 Alert 較死板,MIDP 2.0 新增關鍵特性:支援指示器 (Indicator),可結合 Gauge 顯示進度;並允許加入自訂 Command,大幅提升彈性。
作為 Alert 指示器的 Gauge 必須符合:
interactive=false)。null。Command 或 CommandListener。Gauge gauge = new Gauge(null, false, max, initial);
Alert alert = new Alert("Title");
alert.setIndicator(gauge);
因 UI 類別執行緒安全,可在背景執行緒更新 gauge.setValue(),Alert 會自動重繪。
Command,並實作 CommandListener 處理。Alert.FOREVER(需使用者手動關閉)。public class AlertTest extends MIDlet implements CommandListener {
// 內部類別:TimedAlert, ModalAlert, ProgressAlert, BusyAlert
// 共用 AlertRunner 抽象基類,定義 doAlert() 方法。
// ProgressAlert:含 Gauge 進度條,背景執行緒每秒遞增,達上限後加入 Done Command。
// BusyAlert:使用 Gauge.INDEFINITE 持續動畫,5 秒後自動關閉。
private Display display;
private List alertList;
private AlertRunner[] alertRunners;
protected void startApp() {
if (display == null) {
display = Display.getDisplay(this);
initMIDlet();
}
}
private void initMIDlet() {
alertRunners = new AlertRunner[] {
new TimedAlert("Timed alert"),
new ModalAlert("Modal alert"),
new ProgressAlert("Progress alert"),
new BusyAlert("Busy alert")
};
alertList = new List("Alert Testing", List.IMPLICIT);
alertList.setCommandListener(this);
for (AlertRunner r : alertRunners)
alertList.append(r.toString(), null);
display.setCurrent(alertList);
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) exitMIDlet();
else if (c == List.SELECT_COMMAND)
alertRunners[alertList.getSelectedIndex()].doAlert();
}
// 其他生命週期方法略...
}
| 型態 | Timeout | 指示器 | Command |
|---|---|---|---|
| Timed Alert | 固定時間 (如 5 秒) | 無 | 預設 Dismiss |
| Modal Alert | FOREVER | 無 | 預設 Dismiss |
| Progress Alert | 極長 (1 小時) | Gauge 進度條 | 進度完成後動態加入 Done |
| Busy Alert | 固定時間 | Gauge.INDEFINITE 動畫 | 無 |
MIDP 2.0 讓 Alert 從單純通知升級為可互動的進度回饋元件,善用 setIndicator 與 Command 可建立更友善的使用者體驗。