如何管理BlackBerry应用程序中的屏幕推送?

时间:2011-02-24 22:25:33

标签: blackberry java-me screen

我想知道在这里开发BlackBerry的人是如何在他们的应用程序中管理屏幕的。最常见的做法(以及我正在使用的做法)似乎只是实例化并从当前的屏幕推送新屏幕。我见过的另一个选项是使用Main Application类中的动作来进行转换。你们是如何管理的?

2 个答案:

答案 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的内容将发生变化。如果您有一个场景,您可以在其中显示对象的详细信息,然后按下对象的编辑屏幕,该对象将弹回到该对象的旧版本。