Jak wrócić do poprzedniego ekranu w Blackberry?

W Blackberry mogę nawigować z jednego ekranu do następnego ekranu, ale nie mogę wrócić do poprzedniego ekranu. Naciśnięcie klawisza escape w emulatorze powoduje zakończenie całej aplikacji. Czy jest jakiś inny klucz w emulatorze, aby przejść do poprzedniego ekranu lub jakiś kod, aby przejść z powrotem? Jeśli wiesz proszę pomóż mi.

Author: teedyay, 2009-07-14

2 answers

Jak powiedział Andrey, istnieje stos wyświetlania, więc jeśli wciśniesz ekrany bez ich popierania, pozostaną one w stosie, więc zamknięcie bieżącego ekranu, poprzedni ekran zostanie wyświetlony automatycznie, a jeśli nie ma prev. ekran, aplikacja zostanie zamknięta.

Jednak nie jest dobrze trzymać wiele ekranów w stosie wyświetlaczy, więc można zaimplementować rodzaj stosu wewnątrz ekranów, aby ręcznie obsługiwać nawigację.

Abstrakcyjna klasa ekranu dla implementacji stosu ekranu:

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);
    }
}

Próbka pierwszy ekran:

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());
        }
    }
}

Przykładowy drugi ekran:

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
Author: Maksym Gontar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-15 09:01:19

BlackBerry utrzymuje stos ekranów; stos wyświetlaczy .

Ekrany są wyskakiwane na stos i wyskakiwane ze stosu przez UiApplication za ich pomocą. wyrzucenie ostatniego ekranu ze stosu domyślnie zamyka aplikację .

Jeśli używasz aplikacji o nazwie Myuiapplication, możesz dodać ekran do stosu, wywołując pushScreen(new SomeScreen());

Ekran, jeśli pochodzi z MainScreen, jak większość ekranów BlackBerry, jest tworzony z DEFAULT_CLOSE znacznik, co oznacza, że Przycisk ESCAPE Na BlackBerry naturalnie zamknąć ekran , powodując popScreen() być wywołane. Możesz oczywiście wywołać popScreen() po każdym naciśnięciu klawisza lub przycisku trackwheel / trackball. Ekran może również wywoływać close () na sobie, co ma ten sam wynik; ekran jest wyrzucany ze stosu, zwracając aplikację na poprzedni ekran lub kończąc aplikację, jeśli ostatni ekran zostaje zdjęty ze stosu wyświetlaczy.

Jeśli aplikacja nie jest tworzona jako aplikacja Ui, lub jeśli Ekran został początkowo przesunięty na stos wyświetlania z wątku innego niż UI( takiego jak wątek tła), wtedy należy upewnić się, że wywołanie zamknięcia ekranu jest również wykonane z wątku UI . Można to zrobić, upewniając się, że eventLock jest zabrany do klasy Application przed wykonaniem jakiejkolwiek operacji UI (Zwykle wywoła się invokeLater również w tej sytuacji).

Jeśli Oryginalny Ekran został wyświetlony na stosie jako ekran globalny( bezmodelowy, na wierzchu wszystkich innych ekranów), to musi zostać zdjęty ze stosu za pomocą czegoś w rodzaju:

Ui.getUiEngine ().clusterstatus (to);

W każdym przypadku, nadpisanie onclose() i close() z pochodnego ekranu pozwoli przechwycić występujący wyjątek do debugowania i dalszej analizy.

 13
Author: Andrey Butov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-14 12:03:16