在 MIDP 應用程式中,常包含多個 Screen 或 Canvas。當畫面數量增加,如何在畫面間靈活導航成為關鍵課題。本文探討三種導航模式,並詳細實作適合「前進/後退」規律性畫面的堆疊式導航框架。
Displayable 物件MIDlet 類別實作(生命週期內單一實例)缺點:
switch-case 隨畫面增多膨脹,維護困難適用於層級結構明確的畫面,但實作複雜度較高。
核心思想:
push 入堆疊,並顯示pop 移除當前畫面,peek 取得上一畫面並顯示極適合規律性的「前進/後退」流程。
public class ControllerMIDlet extends MIDlet {
private static ControllerMIDlet instance = null;
private Display display = null;
private Stack ui = new Stack();
public ControllerMIDlet() { instance = this; }
protected void startApp() {}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
// 後退:彈出當前,顯示上一個
public static void goBack() {
instance.ui.pop();
Object obj = instance.ui.peek();
instance.display.setCurrent((Displayable) obj);
}
// 前進:推入新畫面並顯示
public static void forward(Displayable next) {
instance.ui.push(next);
instance.display.setCurrent(next);
}
// 替換:捨棄當前畫面,直接前進(用於等待畫面等暫時性畫面)
public static void replace(Displayable next) {
instance.ui.pop(); // 移除暫時畫面
instance.ui.push(next); // 推入目標畫面
instance.display.setCurrent(next);
}
}
主畫面 → 說明畫面 → 返回主畫面。直接使用 forward() 與 goBack()。
主畫面 → 等待畫面 → 內容畫面。
若用戶在內容畫面按「返回」,應直接回主畫面而非等待畫面。
此時等待畫面 → 內容畫面的切換應使用 replace(),捨棄等待畫面。
堆疊導航框架結構簡單、記憶體效率佳、符合直覺操作邏輯,是 MIDP 應用程式畫面導航的優選方案。搭配 MIDlet 單例作為 Controller,實作輕量且易維護。