Как вы управляете движением экранов в вашем приложении BlackBerry? - PullRequest
2 голосов
/ 25 февраля 2011

Мне было интересно, как люди, которые разрабатывают здесь BlackBerry, занимаются управлением экранами в своем приложении.Наиболее распространенная практика (и та, которую я использую), кажется, состоит в том, чтобы просто создать экземпляр и вытолкнуть новый экран из текущего.Другой вариант, который я видел, - это использовать действия в классе Main Application для выполнения переходов.Как вы, ребята, справляетесь?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

У нас есть ScreenManager класс, управляющий отображением экранов. Он содержит Hashmap, который имеет имя экрана -> пары MainScreen, публичные методы добавления и отображения экрана.

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

В методе showScreen() мы получаем ссылку на соответствующий класс MainScreen. Затем мы используем UiApplication.getUiApplication().popScreen(screen), чтобы скрыть текущий экран. Если экран уже был показан, мы просто используем popScreen() для удаления экранов, пока не достигнем нужного экрана. В противном случае мы просто pushScreen() переместим экран в верхнюю часть стопки.

Звонки на использование UiApplication содержатся в synchronized(UiApplication.getEventLock()) блоке

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

1 голос
/ 25 февраля 2011

Я также просто использую описанный выше метод проталкивания к стеку экранов, но в дополнение к этому я также передаю ссылки на экраны внутри моего стека в качестве параметра для новых экранов. Если у вас есть какие-либо общедоступные методы (которые могут, например, обновлять содержимое экрана и т. Д.), Их можно вызывать из других экранов вашего стека, используя этот вид ссылок. Например. Экран 1

public class MyScreen1 extends MainScreen
{

private LabelField content;

public MyScreen1(){ 
content = new LabelField(“this is the original content”);
add(content);
}

public void UpdateScreen(String newContent){
content.setText(newContent);
}

private void PushScreen{
MyScreen2 screen = new MyScreen2(  (MyScreen1)UiApplication.getUiApplication().getActiveScreen());
    UiApplication.getUiApplication().pushScreen(screen);
}
}

Экран 2

public class MyScreen2 extends MainScreen
{

private MyScreen1 originalScreen

public MyScreen2(MyScreen1 originalScreen){ 
this.originalScreen = originalScreen
public MyScreen1 () {
LabelField content = new LabelField(“Screen1 will now be changed.”);
add(content);
UpdateScreen1();
}

private void UpdateScreen1(){
 originalScreen.UpdateScreen(“This is new content”);
}
}

В этом примере после извлечения MyScreen2 содержимое MyScreen1 будет изменено. Это полезно, если у вас есть сценарий, в котором вы отображаете сведения об объекте, а затем нажимаете экран редактирования для объекта, который возвращает к более старой версии объекта.

...