1

多数の画面を持つ BlackBerry アプリケーションに取り組んでいます。各画面を簡単に行き来できます。ただし、以前のバージョンの画面に「戻る」ようにナビゲートしようとしています。たとえば、A (ホーム画面) と B (セカンド スクリーン) の 2 つの画面があります。次のように A から B に移動します。

UiApplication.getUiApplication().pushScreen(new MsgScreen());

B から A に戻ります。

public boolean onClose() {
         UiApplication.getUiApplication().popScreen(this);
            return true;
        }

A から B に移動するたびに、B の新しいインスタンスが作成されます。ただし、画面 B には に追加できるボタンがありLabelFieldsますVerticalFieldManager。A から B に移動するたびに、追加されたフィールドはコンストラクターの一部ではないため、表示されません。したがって、毎回新しく作成された画面を取得するのではなく、画面の最後のバージョンまたは「前の」バージョンを表示したいと思います。助けてください。

4

1 に答える 1

1

ここにはいくつかの異なる選択肢があると思います(少なくとも):

画面 B をメモリに保持する

ここで、newクラス A 内から B のインスタンスを作成すると、(A クラスの) メンバ変数に保存されます。次に、A から B に戻る必要があるときはいつでも、メンバー変数があればそれを使用します。

クラスA:

 private MsgScreen _bScreen;

 private MsgScreen getBScreen() {
     // don't actually create the screen until we need it,
     //   but don't create more than one instance
     if (_bScreen == null) {
         _bScreen = new MsgScreen();
     }
     return _bScreen;
 }

 public void showB() {
     UiApplication.getUiApplication().pushScreen(getBScreen());
 }

注:再利用可能な 基本クラスを使用して、この手法を多くのクラスに実装するより洗練された方法については、こちらを参照してくださいScreen

B の状態を保存し、(再) 表示時に読み込む

別のオプションは、MsgScreen(B) を破棄し、元のように毎回再作成することです。ただし、元のデザインの代わりに、MsgScreenを閉じたときに のようなものを使用PersistentStoreしてその状態を保存するようにしてください。つまり、ユーザーが B 画面でラベルを追加できる場合は、すべてのラベルの内容を保存します。String[](またはVector) を に保存するかもしれませんPersistentStore。次に、のコンストラクターMsgScreen、またはおそらく ( MsgScreen.java) で:

protected void onUiEngineAttached(boolean attached) {
    if (attached) {
        // load the String[] from the persistent store, 
        //  and create new LabelFields
    } else {
        // save the String[] to the persistent store
    }
}

LabelFields以前とまったく同じように、永続ストアから文字列の配列を再読み込みし、 new を作成できます。

LabelFieldまたは、画面を閉じたときではなく、ユーザーがコンテンツを作成したらすぐにストアにコンテンツを保存することを選択できます。それはあなた次第です。

また、それらのラベルの内容と、ユーザーがアプリを離れて (再起動する前に) 戻ってこない場合にどうするかを検討することもできます。ラベルの紐がなくなっても大丈夫ですか?

また、最初の選択肢は、これと同じことを多数で行っているScreens場合 (またはScreensが複雑で多数の child を持っている場合)、大量のメモリを消費する可能性がありますFields。でのみこMsgScreenの問題が発生する場合は、おそらく大きな問題ではありません。最も簡単な解決策は、最初に提案したものです。ただし、アプリに多数の画面 (A、B、C、D、E、F など) がある場合、それらが実際に表示されていない場合、すべてを保存したくない場合があります。

この種の質問は、UI の状態をいつ保存するか、または保存する必要があるかを判断するのに役立ちます。

于 2013-03-29T02:42:12.260 に答える