2012-04-26 4 views
1

こんにちは、私はバックグラウンドアプリケーションから画面をグローバルにプッシュすることをコントロールしたい。現在、私はメインスクリーンを拡張している画面を作った。この画面をグローバルに表示したい。私は pushGlobalScreen(Screen to push, int priority, flag);を使用しています。しかし、私は実際にやってみたいことはあります。最初の画面を閉じてから、次の画面を表示するなどしたい。だからこれを達成する方法。ここでバックグラウンドプロセスからグローバルに画面をプッシュすることを制御する

私はより明確にそれを説明しています

私は、現在時刻が、アラーム時刻と一致した場合、私は時間のためにデータベースにチェックしています全体のシナリオを説明していてプッシュする画面が複数あると仮定してみましょうアラームは同じ時間保存されます。

while (Checking into database for time){ 
if (databasetime == current time) {// let suppose there is more than 
            //one alarm save for the same time 
    synchronized (getEventLock()) {// This will call one after other but i want to first 

     UiEngine ui = Ui.getUiEngine(); 

     ui.pushGlobalScreen(new AlarmScreen() , 1, UiEngine.GLOBAL_QUEUE);// 
         //Here i want to stop. I want user to close the screen then 
         // i want to push again the screen. As we do in 
         // PushModalScreen(Screen) How can i block 
        //pushGlobalScreen(new AlarmScreen() , 1, UiEngine.GLOBAL_QUEUE); 
     } 

    } 

} 

私の要件は今明らかです。それは...ですか??

+0

私が理解していることは、1つ以上の 'AlarmScreen'インスタンスをディスプレイスタックにプッシュしたくないということですか? – Rupak

+0

はい私は正しいです私は最初の1つを閉じた後に2番目の画面をプッシュしたい – BBdev

+0

私はコードスニペットを投稿して、それをチェックしています。 – Rupak

答えて

0

私はこの問題を解決しますが、別の方法できました。私が選択した方法は、私はすべてのIDをテーブルに格納していて、テーブルにIDがあるかどうかを確認しています。私は1つの画面しか押していません。そしてそれを閉じる前に、私はテーブルのIDがもっとあるかどうかをチェックしています。ただupdating the Contents of the Screenです。今は私が望んでいた方法と同じように働いています。データがなくなったら画面を閉じるだけです。

2

新しいAlarmScreenインスタンスをプッシュする前に、ディスプレイスタックからAlarmScreenインスタンスを削除するためのコードスニペットを確認してください。

net.rim.device.api.ui.Screen currentScreen = Ui.getUiEngine().getActiveScreen(); 

// pop previously pushed AlarmScreen 
if (currentScreen instanceof AlarmScreen) { 
    try { 
     Ui.getUiEngine().popScreen(currentScreen); 
    } catch (IllegalArgumentException iaexc) { 
     // If your screen is not on the stack. 
    } catch (Exception exc) {   
    } 
} 

// push new AlarmScreen 
synchronized (Application.getEventLock()) { 
    Ui.getUiEngine().pushGlobalScreen(new AlarmScreen() , 1, UiEngine.GLOBAL_QUEUE); 
} 




アプリケーション( UiApplication)に続き AlarmScreenのキューを使用しています。ディスプレイスタックからアクティブになると、 AlarmScreenが待機キューからディスプレイスタックにプッシュされます。

package mypackage; 

import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.container.MainScreen; 

public class MyApp extends UiApplication implements CloseEventListener { 
    public static void main(String[] args) { 
     (new MyApp()).enterEventDispatcher(); 
    } 

    private AlarmScreen []queue; 
    private int MAX = 10; 
    private int head = 0; 

    public MyApp() { 
     // initialize queue 
     queue = new AlarmScreen[MAX]; 
     head = 0; 
     for (int i=0;i<MAX;i++) { 
      queue[i] = new AlarmScreen(this, "Screen no. " + i); 
     } 

     // push first screen on display 
     UiApplication.getUiApplication().pushScreen(queue[head ++]); 
    } 

    public void screenClosed() { 
     if (head < MAX) { 
      UiApplication.getUiApplication().pushScreen(queue[head ++]); 
     } 
    } 
} 

interface CloseEventListener { 
    public void screenClosed(); 
} 

class AlarmScreen extends MainScreen { 
    private CloseEventListener listener; 

    public AlarmScreen(CloseEventListener listener, String title) { 
     setTitle(title); 
     this.listener = listener; 
    } 

    public boolean onClose() { 
     try { 
      UiApplication.getUiApplication().invokeLater(new Runnable() { 
       public void run() { 
        close(); 
       } 
      }); 
     } catch (Exception exc) { 
      System.out.println(exc.getMessage()); 
     } 
     // push a new screen from waiting queue 
     if (listener != null) { 
      listener.screenClosed(); 
     } 
     return true; 
    } 
} 
+0

実際には私はこの方法でそれをやりたいとは思っていません。ユーザーが画面を閉じて、新しいAlarmScreen()を押したいと思っています。つまり、ディスプレイスタックに1つの画面が存在する場合、コードpushGlobalScreenを2回実行しないでください。スタックに現在画面が存在しなくなるまで待ちます。あなたのコードスニペットをありがとう。 – BBdev

+0

その後、すべての 'AlarmScreen'インスタンスを保持するキューを維持することができます。ユーザーがアクティブな 'AlarmScreen'を閉じるとき、キューの最初の要素(空でない場合)を表示するだけです。あなたが実装についての助けを必要とするなら、私はあなたにヒントを与えることができます。 – Rupak

+0

ええ、それは良いことになるいくつかの助けを提供することができます:) – BBdev

関連する問題