2009-07-14 14 views
5

Blackberryでは、ある画面から次の画面に移動できますが、前の画面に戻ることはできません。エミュレータでエスケープキーを押すと、アプリケーション全体が終了します。エミュレータに、前の画面に戻るための他のキーや戻るためのコードがありますか?あなたが私を助けてください知っている場合。Blackberryで前の画面に戻るにはどうすればいいですか?

+1

について、あなたはどのようなエミュレータ/ソフトウェアを求めていますか? – brian

答えて

16

アンドレイは言ったように、ディスプレイスタックがあるので、ポップせずに画面をプッシュすると、スタックにとどまるので、現在の画面を閉じ、前の画面が自動的に表示されます。画面が閉じると、アプリケーションは終了します。

しかし、多くの画面をディスプレイスタックに保持するのは良くないので、手動でナビゲーションを処理するために、画面内に種類のスタックを実装することができます。

抽象的な画面スタックの実装のための画面クラス:

public abstract class AScreen extends MainScreen { 
    Screen prevScreen = null; 

    void openScreen(AScreen nextScreen) { 
     nextScreen.prevScreen = this; 
     UiApplication.getUiApplication().popScreen(this); 
     UiApplication.getUiApplication().pushScreen(nextScreen); 
    } 

    void openPrevScreen() { 
     UiApplication.getUiApplication().popScreen(this); 
     if (null != prevScreen) 
      UiApplication.getUiApplication().pushScreen(prevScreen); 
    } 
} 

サンプル最初の画面:

public class FirstScreen extends AScreen implements FieldChangeListener { 

    ButtonField mButton = null; 

    public FirstScreen() { 
     super(); 
     mButton = new ButtonField("Go second screen", ButtonField.CONSUME_CLICK); 
     mButton.setChangeListener(this); 
     add(mButton); 
    } 

    public void fieldChanged(Field field, int context) { 
     if (mButton == field) { 
      openScreen(new SecondScreen()); 
     } 
    } 
} 

サンプル2番目の画面:

public class SecondScreen extends AScreen implements FieldChangeListener { 

    ButtonField mButton = null; 

    public SecondScreen() { 
     super(); 
     mButton = new ButtonField("Go first screen", ButtonField.CONSUME_CLICK); 
     mButton.setChangeListener(this); 
     add(mButton); 
    } 

    public void fieldChanged(Field field, int context) { 
     if (mButton == field) { 
      openPrevScreen(); 
     } 
    } 

    public boolean onClose() { 
     openPrevScreen(); 
     return true; 
    } 
} 
13

BlackBerryは画面のスタックを維持します。 ディスプレイスタック

画面がスタックにポップされ、UiApplicationによってスタックからポップされます。 最後の画面をスタックからポップすると、アプリケーションはデフォルトでになります。

MyUiApplicationという名前のUiApplicationを実行している場合、pushScreen(new SomeScreen())を呼び出して、スタックに画面を追加できます。

画面、ほとんどのBlackBerryのスクリーンは、呼び出される)(BlackBerryでESCAPEボタンが自然popScreenを引き起こし、画面を閉鎖することを意味し、DEFAULT_CLOSEフラグで作成されているように、MainScreen由来する場合。もちろん、keypressまたはtrackwheel/trackballのクリックに続いてpopScreen()を呼び出すこともできます。画面はclose()を呼び出すこともできますが、同じ結果が得られます。画面はスタックからポップされ、アプリケーションは前の画面に戻り、最後の画面が表示スタックからポップされるとアプリケーションが終了します。

アプリケーションがUiApplicationとして作成されていない場合、または最初に画面がUI以外のスレッド(バックグラウンドスレッドなど)からディスプレイスタックにプッシュされた場合は、 UIのスレッドから行われたも表示されます。これは、イベントロックが、UI操作を実行する前にアプリケーションクラスにあることを確認することによって行うことができます(この状況では通常、invokeLaterを呼び出します)。

元の画面はグローバルスクリーン(他のすべての画面の上にモードレス)としてスタックにポップされた場合、それはのようなものを使用してスタックからポップされなければならない:

Ui.getUiEngine() .dismissStatus(this);派生画面

いずれの場合においても

OnCloseの()クローズをオーバーライド()トラップにデバッグおよびさらなる分析のために発生した例外を、あなたができるようになります。

関連する問題