我想知道在这里开发BlackBerry的人是如何在他们的应用程序中管理屏幕的。最常见的做法(以及我正在使用的做法)似乎只是实例化并从当前的屏幕推送新屏幕。我见过的另一个选项是使用Main Application类中的动作来进行转换。你们是如何管理的?
答案 0 :(得分:2)
我们有一个ScreenManager
课程来管理屏幕的显示。它包含一个具有屏幕名称的Hashmap - > MainScreen对,添加和显示屏幕的公共方法。
当我们的应用程序启动时,会创建所需的所有屏幕并将其添加到ScreenManager
类。
在showScreen()
方法中,我们获得了对相应MainScreen
类的引用。然后我们使用UiApplication.getUiApplication().popScreen(screen)
隐藏当前屏幕。如果屏幕已经显示,我们只需使用popScreen()
删除屏幕,直到我们到达我们想要的屏幕。否则我们只需pushScreen()
将屏幕移动到堆顶。
使用UiApplication
的电话包含在synchronized(UiApplication.getEventLock())
块
这种方法为我们工作。我们可以在应用程序启动时创建一次所有屏幕,因此不需要在应用程序的过程中反复完成。
答案 1 :(得分:1)
我也只是使用上面推送到屏幕堆栈的方法,但是除此之外我还将我的堆栈中的屏幕引用作为参数添加到新屏幕。 如果您有任何公共方法(例如可能更新屏幕内容等),可以使用此类引用从堆栈中的其他屏幕调用这些方法。例如。 屏幕1
public class MyScreen1 extends MainScreen
{
private LabelField content;
public MyScreen1(){
content = new LabelField(“this is the original content”);
add(content);
}
public void UpdateScreen(String newContent){
content.setText(newContent);
}
private void PushScreen{
MyScreen2 screen = new MyScreen2( (MyScreen1)UiApplication.getUiApplication().getActiveScreen());
UiApplication.getUiApplication().pushScreen(screen);
}
}
屏幕2
public class MyScreen2 extends MainScreen
{
private MyScreen1 originalScreen
public MyScreen2(MyScreen1 originalScreen){
this.originalScreen = originalScreen
public MyScreen1 () {
LabelField content = new LabelField(“Screen1 will now be changed.”);
add(content);
UpdateScreen1();
}
private void UpdateScreen1(){
originalScreen.UpdateScreen(“This is new content”);
}
}
在此示例中,弹出MyScreen2后,MyScreen1的内容将发生变化。如果您有一个场景,您可以在其中显示对象的详细信息,然后按下对象的编辑屏幕,该对象将弹回到该对象的旧版本。