Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry 返回到屏幕的上一版本_Blackberry_Navigation_Screen - Fatal编程技术网

Blackberry 返回到屏幕的上一版本

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

我正在开发一个有很多屏幕的黑莓应用程序。我能够轻松地在每个屏幕上来回导航。但是,我正在尝试“返回”到屏幕的上一个版本。例如,有两个屏幕A(主屏幕)和B(第二个屏幕)。我从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,添加的字段都不会被查看,因为它不是构造函数的一部分。因此,我希望查看屏幕的最后一个或“上一个”版本,而不是每次都获得一个新创建的屏幕。请帮忙。

我想你在这里有几个不同的选择(至少):

将屏幕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
内容后立即将其保存到存储中,而不是在屏幕关闭时保存。这取决于你

<>你也可以考虑这些标签的内容是什么,如果用户离开你的应用程序,并且不返回(在重新启动之前)会发生什么。标签的字符串是否正确