Как перейти обратно к предыдущему экрану в Blackberry?

голоса
5

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

Задан 14/07/2009 в 05:23
источник пользователем
На других языках...                            


2 ответов

голоса
16

Как сказал Андрей, есть стек дисплея, так что если вы нажмете экраны без выскакивают их, они останутся в стеке, поэтому закрытия текущего экрана, предыдущий экран будет показан 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;
    }
}
Ответил 15/07/2009 в 10:01
источник пользователем

голоса
13

BlackBerry поддерживает стек экранов; стек дисплея .

Экраны совал в стек, и выталкивается из стека через UIApplication , ответственные за них. Выталкивание последнего экрана из стека закрывает приложение по умолчанию .

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

Экран, если полученный из В начале, как и большинство экранов BlackBerry есть, создаются с DEFAULT_CLOSE флагом, а это означает , что кнопка ESCAPE на BlackBerry естественно закрыть экран , вызывая popScreen () будет называться. Можно, конечно, назвать popScreen () после любого нажатия клавиши или колесо / трекбола мыши. Экран может также вызвать близко () на себя, который имеет тот же результат; экран извлекается из стека, возвращая приложение к предыдущему экрану, или о прекращении применения , если последний экран извлекается из стека дисплея.

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

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

. Ui.getUiEngine () dismissStatus (это);

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

Ответил 14/07/2009 в 13:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more