我认为你在这里有几个不同的选择(至少):
将屏幕 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
}
}
您可以从持久存储重新加载字符串数组,并创建 new LabelFields
,就像以前一样。
或者,您可以选择LabelField
在用户创建内容后立即将内容保存到商店,而不是在屏幕关闭时保存。随你(由你决定。
您可能还会考虑这些标签的内容是什么,以及如果用户离开您的应用并且没有返回(在重新启动之前)会发生什么。标签的字符串丢失可以吗?
Screens
此外,如果您对很多人(或者如果Screens
很复杂,并且有很多孩子Fields
)做同样的事情,第一个替代方案可能会占用大量内存。如果你只有这个问题MsgScreen
,那么它可能不是一个大问题,最简单的解决方案是我建议的第一个。但是,如果您的应用中有很多屏幕(A、B、C、D、E、F 等),那么当它们实际上并没有显示时,您可能不想全部保存它们。
这类问题应该可以帮助您确定何时或是否应该保存 UI 的状态。