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

Я не полагаю, что существует способ получить значение текущего повторения цикла foreach. Подсчет себя, кажется, лучший способ.

май я спрашиваю, почему Вы хотели бы знать?

кажется, что Вы были бы самый вероятный сделать одну из трех вещей:

1) Получение объекта от набора, но в этом случае у Вас уже есть он.

2) подсчет объектов для более позднего сообщения, обрабатывающего... наборы, имеет свойство Count, которое Вы могли использовать.

3) Установка свойства на основанном на объектах на его порядке в цикле..., хотя Вы могли легко устанавливать это, когда Вы добавили объект к набору.

5
задан teedyay 28 April 2010 в 12:25
поделиться

2 ответа

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

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

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

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;
    }
}
16
ответ дан 18 December 2019 в 05:50
поделиться

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

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

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

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

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

Если исходный экран был помещен в стек как глобальный экран (немодальный,

13
ответ дан 18 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: