Запуск одного экрана BlackBerry с другого - PullRequest
0 голосов
/ 16 апреля 2010

Я недавно столкнулся с трудностями, когда делал последние штрихи для своего приложения BlackBerry. Я создаю экран входа в систему, который, если пользователь успешно вошел в систему, переходит на экран загрузки данных, а затем на домашний экран. На главном экране вы можете использовать приложение. Все отлично работает, но одно, я не могу плавно перейти от экрана входа в систему к экрану загрузки, на домашний экран. Я могу перейти от экрана входа в систему к окну загрузки, хорошо, потому что я делаю это с помощью нажатия кнопки, которая находится в потоке графического интерфейса, но тогда у меня есть экран входа в систему в нижней части стека, и я не могу его получить используя метод отклонения. Оказавшись на экране загрузки, я не могу нажать на домашний экран, потому что я не делаю это с помощью метода gui, хотя я могу обновить GUI с помощью следующего фрагмента кода:

   private void checkData(){

            Timer loadingTimer = new Timer();
    TimerTask loadingTask = new TimerTask()
    {

        public void run()
        {
            // set the progress bar
            progressGaugeField.setValue(DataManager.getDataLoaded());

            // for repainting the screen
            invalidate();
        }
    };
    loadingTimer.scheduleAtFixedRate(loadingTask, 500, 500);
}

Кто-нибудь знает, как решить мою проблему плавного перехода с экрана входа в систему на экран загрузки на домашний экран? Примечание: как только я окажусь на домашнем экране, я бы хотел, чтобы он был единственным экраном в стеке.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 19 апреля 2010

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

  • Вы храните информацию для входа
  • если информация для входа не сохранена, вы нажимаете на экран входа в систему
  • в случае успеха вы сохраняете информацию для входа и переходите к отображению главного экрана
  • в случае сбоя входа в систему или отмены, домашний экран не отображается

Если эти предположения обоснованно верны, приведенный ниже код должен работать для вас.

public class YourApp extends UiApplication {
public YourApp() {
    final AppHomeScreen screen = new AppHomeScreen();
    pushScreen(screen);

    if(getLoginInfo() == null) {
        final LoginScreen loginScreen = new LoginScreen();
        this.invokeLater(new Runnable() {
            public void run() {
                pushModalScreen(loginScreen);
                if(getLoginInfo()==null)
                    popScreen(screen); //exit the app
                }
                //perhaps the loading screen populates info in your home screen then pops itself
                pushScreen(new LoadingScreen(screen));
            }
        );
    }
}
1 голос
/ 17 апреля 2010

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

Чтобы загрузка работала и отслеживала ее ход, вы можете использовать следующий код

LoadingScreen lScreen = new LoadingScreen();
getUiEngine().pushScreen(lScreen);
_invokeIDGame = getApplication().invokeLater(new Runnable() {
    public void run() {
        // Check to see if the loading is done.
        // implement an isLoading function to determine it
        if (lScreen.isLoading() == false) {
        // Cancel invoking this piece of code again (normally is invoked
        // every 500 ms, as specified below)
        getApplication().cancelInvokeLater(_invokeIDGame);
        // Pop the loading screen off the stack, which returns the user to this screen
        getUiEngine().popScreen(lScreen);
         // close this screen
         close();
        }
    }
}, 500, true); // rerun this code every 500ms
0 голосов
/ 16 апреля 2010

Если в коде вы знаете, когда нужно нажимать на экран, вы можете использовать функцию UiApplication pushScreen . Вы начинаете с получения дескриптора текущего приложения с пользовательским интерфейсом:

UiApplication currentapp = UiApplication.getUiApplication();

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

currentapp.getActiveScreen();

Затем вы можете использовать экземпляр UiApplication, чтобы открыть ваш новый экран:

currentapp.pushScreen(homeScreen);

Надеюсь, это поможет:)

...