如何导航回到在黑莓之前的屏幕?(How to navigate back to the previo

2019-06-25 20:00发布

在黑莓,我可以从一个屏幕转到下一屏幕,但我不能导航回到先前的画面。 按在模拟器中ESC键终止整个应用程序。 有没有在模拟器中任意键转到上一个屏幕或任何代码导航回? 如果你知道,请帮助我。

Answer 1:

正如安德烈说,有一个显示栈,所以如果你把屏幕弹出没有他们,他们将留在堆栈,因此关闭当前屏幕,先前的屏幕将显示automattically,如果没有上一个。 屏幕,应用程序将关闭。

然而这不是很好的显示栈持有多个屏幕,这样你就可以实现屏幕的内部样的叠加,手动处理导航。

对于屏幕堆栈实现摘要屏幕类:

public abstract class AScreen extends MainScreen {
    Screen prevScreen = null;

    void openScreen(AScreen nextScreen) {
        nextScreen.prevScreen = this;
        UiApplication.getUiApplication().popScreen(this);
        UiApplication.getUiApplication().pushScreen(nextScreen);
    }

    void openPrevScreen() {
        UiApplication.getUiApplication().popScreen(this);
        if (null != prevScreen)
            UiApplication.getUiApplication().pushScreen(prevScreen);
    }
}

示例第一个画面:

public class FirstScreen extends AScreen implements FieldChangeListener {

    ButtonField mButton = null;

    public FirstScreen() {
        super();
        mButton = new ButtonField("Go second screen", ButtonField.CONSUME_CLICK);
        mButton.setChangeListener(this);
        add(mButton);
    }

    public void fieldChanged(Field field, int context) {
        if (mButton == field) {
            openScreen(new SecondScreen());
        }
    }
}

样品第二个画面:

public class SecondScreen extends AScreen implements FieldChangeListener {

    ButtonField mButton = null;

    public SecondScreen() {
        super();
        mButton = new ButtonField("Go first screen", ButtonField.CONSUME_CLICK);
        mButton.setChangeListener(this);
        add(mButton);
    }

    public void fieldChanged(Field field, int context) {
        if (mButton == field) {
            openPrevScreen();
        }
    }

    public boolean onClose() {
        openPrevScreen();
        return true;
    }
}


Answer 2:

黑莓保持画面的堆栈; 显示器叠层

屏幕被弹出到堆栈,并通过主管他们的UIApplication的弹出栈。 跳跳的最后一个屏幕从堆栈关闭默认的应用程序

如果你正在运行一个UIApplication的,名为MyUiApplication,您可以通过调用pushScreen添加屏幕堆栈(新SomeScreen());

屏幕方面,如果从MainScreen衍生,因为大多数黑莓手机屏幕是,与DEFAULT_CLOSE标志创建的,这意味着在BlackBerry退出按钮自然会关闭屏幕 ,造成popScreen()被调用。 你可以,当然,之后的任何按键或滚轮/轨迹球点击呼叫popScreen()。 该屏幕还可以调用close()本身上,其具有相同的结果; 屏幕被弹出栈,该应用程序在返回到先前的屏幕,或终止应用程序,如果最后一个屏幕被弹出显示堆栈。

如果应用程序不作为的UIApplication创建,或者如果屏幕最初推到从非UI线程显示堆栈(如后台线程),则必须确保调用关闭屏幕也做从UI线程 。 这可以通过确保eventLock正在执行任何UI操作(人们通常称之为invokeLater的为好,在这种情况下)之前采取的Application类来完成。

如果原来的屏幕被弹出到堆栈作为一个全球性的画面(无模式,在所有其他屏幕顶部),那么它必须被弹出使用类似的堆栈:

。Ui.getUiEngine()DismissStatus(本);

在任何情况下,覆盖的OnClose()close()所导出的屏幕将允许您陷阱用于调试和进一步分析所出现的异常。



文章来源: How to navigate back to the previous screen in Blackberry?