Я не полагаю, что существует способ получить значение текущего повторения цикла foreach. Подсчет себя, кажется, лучший способ.
май я спрашиваю, почему Вы хотели бы знать?
кажется, что Вы были бы самый вероятный сделать одну из трех вещей:
1) Получение объекта от набора, но в этом случае у Вас уже есть он.
2) подсчет объектов для более позднего сообщения, обрабатывающего... наборы, имеет свойство Count, которое Вы могли использовать.
3) Установка свойства на основанном на объектах на его порядке в цикле..., хотя Вы могли легко устанавливать это, когда Вы добавили объект к набору.
Как сказал Андрей, есть стек отображения, поэтому, если вы нажимаете экраны, не открывая их, они останутся в стеке, поэтому при закрытии текущего экрана предыдущий экран будет показан автоматически, а если есть нет пред. 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;
}
}
BlackBerry поддерживает несколько экранов; стек дисплея .
Экраны помещаются в стек и извлекаются из стека через UiApplication , отвечающее за них. Удаление последнего экрана из стека закрывает приложение по умолчанию .
Если вы используете приложение UiApplication с именем MyUiApplication, вы можете добавить экран в стек, вызвав pushScreen (новый SomeScreen ( )) ;
Экран, если он является производным от MainScreen, как и большинство экранов BlackBerry, создается с флагом DEFAULT_CLOSE , что означает, что кнопка ESCAPE на BlackBerry закроется естественным образом экран , вызывающий вызов popScreen (). Вы можете, конечно, вызвать popScreen () после любого нажатия клавиши или щелчка колесика / трекбола. Экран также может вызывать close () для себя, что дает тот же результат; экран выталкивается из стека, возвращая приложение к предыдущему экрану или завершая работу приложения, если последний экран выскакивает из стека отображения.
Если приложение не создано как UiApplication, или если экран был изначально помещается в стек дисплея из потока, не относящегося к пользовательскому интерфейсу (например, из фонового потока), тогда необходимо убедиться, что вызов закрытия экрана также выполняется из потока пользовательского интерфейса . Это можно сделать, убедившись, что eventLock используется в классе Application перед выполнением любой операции пользовательского интерфейса (обычно также вызывается invokeLater в в этой ситуации).
Если исходный экран был помещен в стек как глобальный экран (немодальный,