Как вернуться к предыдущему экрану в Blackberry?

В Blackberry я могу перейти от одного экрана к следующему, но не могу вернуться к предыдущему экрану. Нажатие клавиши escape в эмуляторе завершает все приложение. Есть ли какая-либо другая клавиша в эмуляторе для перехода на предыдущий экран или какой-либо код для перехода назад? Если вы знаете, пожалуйста, помогите мне.

 Brian14 июл. 2009 г., 07:05
о каком эмуляторе / программном обеспечении вы спрашиваете?

Ответы на вопрос(2)

Решение Вопроса

Как сказал Андрей, существует стек отображения, поэтому, если вы нажимаете на экраны, не нажимая на них, они останутся в стеке, поэтому при закрытии текущего экрана предыдущий экран будет отображаться автоматически, а если предыстория отсутствует. Экран, приложение закроется.

Однако нехорошо держать много экранов в стеке отображения, поэтому вы можете реализовать вид стека внутри экранов, чтобы обрабатывать навигацию вручную.

Абстрактный класс экрана для реализации стека экрана:

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;
    }
}

BlackBerry поддерживает стек экранов;the display stack.

Экраны выскочили на стопку и выскочили из стека черезUiApplication отвечающий за них.Popping the last screen off the stack closes the application by default.

Если вы используете UiApplication с именем MyUiApplication, вы можете добавить экран в стек, вызвавpushScreen(new SomeScreen());

Экран, если он получен из MainScreen, как и большинство экранов BlackBerry, создается сDEFAULT_CLOSE флаг, означающий, чтоESCAPE button on the BlackBerry will naturally close the screenвызывая popScreen () для вызова. Конечно, вы можете вызвать popScreen () после любого нажатия клавиши или трекбола / трекбола. Экран также может вызывать close () для себя, что приводит к тому же результату; экран выталкивается из стека, возвращая приложение к предыдущему экрану, или завершает работу приложения, если последний экран выталкивается из стека дисплея.

Если приложение не создано как приложение UiApplication или экран изначально был помещен в стек отображения из потока, не являющегося пользовательским интерфейсом (например, фонового потока), то необходимо убедиться, что вызов для закрытия экрана такжеdone from the UI thread, Это можно сделать, убедившись, чтоeventLock берется наApplication класс до выполнения какой-либо операции пользовательского интерфейса (обычноinvokeLater ну и в этой ситуации).

Если исходный экран был вставлен в стек как глобальный экран (без режима, поверх всех других экранов), то он должен быть удален из стека с помощью чего-то вроде:

Ui.getUiEngine().dismissStatus(this);

В любом случае, переопределениеonClose() а такжеclose() из производныхScreen позволит вам перехватить возникающее исключение для отладки и дальнейшего анализа.

Ваш ответ на вопрос