Blackberry 返回到屏幕的上一版本
我正在开发一个有很多屏幕的黑莓应用程序。我能够轻松地在每个屏幕上来回导航。但是,我正在尝试“返回”到屏幕的上一个版本。例如,有两个屏幕A(主屏幕)和B(第二个屏幕)。我从A导航到B,如下所示:Blackberry 返回到屏幕的上一版本,blackberry,navigation,screen,Blackberry,Navigation,Screen,我正在开发一个有很多屏幕的黑莓应用程序。我能够轻松地在每个屏幕上来回导航。但是,我正在尝试“返回”到屏幕的上一个版本。例如,有两个屏幕A(主屏幕)和B(第二个屏幕)。我从A导航到B,如下所示: UiApplication.getUiApplication().pushScreen(new MsgScreen()); 我从B导航回A: public boolean onClose() { UiApplication.getUiApplication().popScreen(th
UiApplication.getUiApplication().pushScreen(new MsgScreen());
我从B导航回A:
public boolean onClose() {
UiApplication.getUiApplication().popScreen(this);
return true;
}
每当我从A导航到B时,就会创建一个新的B实例。但是,屏幕B有一个按钮,允许它将
LabelFields
添加到VerticalFieldManager
。无论何时从A导航到B,添加的字段都不会被查看,因为它不是构造函数的一部分。因此,我希望查看屏幕的最后一个或“上一个”版本,而不是每次都获得一个新创建的屏幕。请帮忙。我想你在这里有几个不同的选择(至少):
将屏幕B保留在内存中
在这里,当您从类a中创建B的新的实例时,您将把它保存在(类的)成员变量中。然后,无论何时需要从A返回B,都将使用成员变量(如果有):
A类:
private MsgScreen\u bScreen;
私有MsgScreen getBScreen(){
//除非我们需要,否则不要真正创建屏幕,
//但不要创建多个实例
如果(_bScreen==null){
_b屏幕=新的MsgScreen();
}
返回屏幕;
}
公共图书馆b({
UiApplication.getUiApplication().pushScreen(getBScreen());
}
注意:在许多屏幕
类中,使用可重用的基类
存储B的状态,并在(重新)显示时加载
另一种选择是让MsgScreen
(B)销毁,并像最初一样每次重新创建。但是,与原始设计不同的是,请确保在关闭MsgScreen
时,使用类似PersistentStore
的内容来保存其状态。换句话说,如果用户可以在B屏幕上添加标签,则保存所有标签的内容。也许您可以将字符串[]
(或向量
)保存到持久存储
。然后,在MsgScreen
的构造函数中,或者在(MsgScreen.java
)中:
protectedvoid-onuinegineattached(布尔值附加){
如有(附件){
//从持久存储中加载字符串[],
//创建新的实验室
}否则{
//将字符串[]保存到持久存储区
}
}
您可以从持久存储中重新加载字符串数组,并创建新的LabelFields
,与以前完全相同
或者,您可以选择在用户创建LabelField
内容后立即将其保存到存储中,而不是在屏幕关闭时保存。这取决于你
<>你也可以考虑这些标签的内容是什么,如果用户离开你的应用程序,并且不返回(在重新启动之前)会发生什么。标签的字符串丢失可以吗
此外,如果您对许多屏幕
(或者屏幕
很复杂,并且有许多子字段
)执行相同的操作,则第一种方法可能会占用大量内存。如果您的MsgScreen
只有这个问题,那么这可能不是什么大问题,最简单的解决方案就是我建议的第一个。但是,如果你的应用程序中有许多屏幕(A、B、C、D、E、F等),那么你可能不想在它们没有实际显示时保存它们
这类问题可以帮助您确定何时或是否应该保存UI的状态。我认为您在这里有两种不同的选择(至少):
将屏幕B保留在内存中
在这里,当您从类a中创建B的新的实例时,您将把它保存在(类的)成员变量中。然后,无论何时需要从A返回B,都将使用成员变量(如果有):
A类:
private MsgScreen\u bScreen;
私有MsgScreen getBScreen(){
//除非我们需要,否则不要真正创建屏幕,
//但不要创建多个实例
如果(_bScreen==null){
_b屏幕=新的MsgScreen();
}
返回屏幕;
}
公共图书馆b({
UiApplication.getUiApplication().pushScreen(getBScreen());
}
注意:在许多屏幕
类中,使用可重用的基类
存储B的状态,并在(重新)显示时加载
另一种选择是让MsgScreen
(B)销毁,并像最初一样每次重新创建。但是,与原始设计不同的是,请确保在关闭MsgScreen
时,使用类似PersistentStore
的内容来保存其状态。换句话说,如果用户可以在B屏幕上添加标签,则保存所有标签的内容。也许您可以将字符串[]
(或向量
)保存到持久存储
。然后,在MsgScreen
的构造函数中,或者在(MsgScreen.java
)中:
protectedvoid-onuinegineattached(布尔值附加){
如有(附件){
//从持久存储中加载字符串[],
//创建新的实验室
}否则{
//将字符串[]保存到持久存储区
}
}
您可以从持久存储中重新加载字符串数组,并创建新的LabelFields
,与以前完全相同
或者,您可以选择在用户创建LabelField
内容后立即将其保存到存储中,而不是在屏幕关闭时保存。这取决于你
<>你也可以考虑这些标签的内容是什么,如果用户离开你的应用程序,并且不返回(在重新启动之前)会发生什么。标签的字符串是否正确