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

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

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

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

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

Пример первого экрана:

Пример второго экрана:



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** позволит вам перехватить возникающее исключение для отладки и дальнейшего анализа.