首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 畫面導航實戰:堆疊式導航框架設計與實作

     編輯:J2ME

在 MIDP 應用程式中,多畫面切換是核心需求。隨著畫面數量增加,若缺乏結構化導航機制,程式碼將難以維護。本文探討三種導航模式,並深入實作適合「前進/後退」規律流程的堆疊式導航框架。

導航模式比較

模式優點缺點
MVC(如 SmartTicket) 結構嚴謹,關注點分離 Controller 膨脹、所有 View 啟動時初始化佔用記憶體、事件識別碼管理複雜
二叉樹導航 適合非線性流程 實作複雜,多數應用不需要
堆疊導航(本文推薦) 結構簡單、符合直覺、按需建立畫面、自動保留回退狀態 跨畫面資料傳遞需透過建構子參數,參數可能隨層級增加

核心設計:ControllerMIDlet

利用 MIDlet 單一實例特性作為控制器,結合 java.util.Stack 管理畫面歷史:

public class ControllerMIDlet extends MIDlet {
    private static ControllerMIDlet instance = null;
    private Display display = null;
    private Stack uiStack = new Stack();

    public ControllerMIDlet() { instance = this; }

    protected void startApp() {}
    protected void pauseApp() {}
    protected void destroyApp(boolean unconditional) {}

    /** 前進至下一個畫面 */
    public static void forward(Displayable next) {
        instance.uiStack.push(next);
        instance.display.setCurrent(next);
    }

    /** 返回上一個畫面 */
    public static void goBack() {
        instance.uiStack.pop();          // 移除目前畫面
        Object prev = instance.uiStack.peek(); // 取得前一畫面
        instance.display.setCurrent((Displayable) prev);
    }

    /** 替換目前畫面(不保留回退至該畫面) */
    public static void replace(Displayable next) {
        instance.uiStack.pop();
        instance.uiStack.push(next);
        instance.display.setCurrent(next);
    }

    /** 連續壓入兩個畫面但只顯示第二個(如:登入頁隱藏壓入,顯示主選單) */
    public static void forward(Displayable hidden, Displayable shown) {
        instance.uiStack.push(hidden);
        instance.uiStack.push(shown);
        instance.display.setCurrent(shown);
    }
}

實際情境與對應策略

情境 1:簡單前進/後退(說明頁、設定頁)

直接呼叫 forward() 與 goBack(),堆疊行為符合 FILO 特性。

情境 2:暫時性等待畫面(網路載入中)

使用者從畫面 1 進入畫面 2(等待),再進畫面 3(結果)。若在畫面 3 按「返回」,應直接回畫面 1,而非畫面 2。解法:畫面 2→3 時呼叫 replace() 丟棄等待畫面。

情境 3:條件分歧流程(自動登入 vs 手動登入)

  • 勾選自動登入:登入畫面 → 主選單(登入畫面隱藏壓入堆疊)
  • 未勾選:登入畫面 → 主選單(正常壓入)

使用 forward(hidden, shown) 實現「隱藏壓入」。返回時若取消操作,goBack() 會正確回到登入畫面。

優缺點總結與擴展方向

  • 優點:無需管理畫面狀態、記憶體效率佳(按需建立)、程式碼簡潔易維護
  • 缺點:跨層資料傳遞參數冗長、不適合複雜非線性導航
  • 後續強化:整合非同步網路操作框架,將執行緒管理、等待畫面顯示、錯誤處理封裝,讓業務邏輯專注於核心流程
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved