ここにはいくつかの異なる選択肢があると思います(少なくとも):
画面 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 の状態をいつ保存するか、または保存する必要があるかを判断するのに役立ちます。