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

J2ME 畫面導航最佳實踐:堆疊式導航框架設計

     編輯:Java 程式設計入門

前言

在 MIDP 應用程式中,常包含多個 Screen 或 Canvas。當畫面數量增加,如何在畫面間靈活導航成為關鍵課題。本文探討三種導航模式,並詳細實作適合「前進/後退」規律性畫面的堆疊式導航框架。

常見導航模式比較

1. 傳統 MVC 模式(如 Sun SmartTicket 範例)

  • Model:儲存應用資料
  • View:各 Displayable 物件
  • Controller:由 MIDlet 類別實作(生命週期內單一實例)

缺點:

  1. 每個事件需唯一識別碼,switch-case 隨畫面增多膨脹,維護困難
  2. Controller 參考所有 View,啟動時全初始化,記憶體開銷大
  3. 大量 Model 物件與例外處理使邏輯過度複雜

2. 二叉樹導航

適用於層級結構明確的畫面,但實作複雜度較高。

3. 堆疊導航(本文重點)

核心思想:

  • 前進:將下一個畫面 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,實作輕量且易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved