Domanda

In Blackberry posso passare da una schermata alla successiva schermata, ma non è possibile tornare alla schermata precedente.Premendo il tasto escape nell'emulatore termina l'intera applicazione.C'è qualche altra chiave nell'emulatore per tornare alla schermata precedente o qualsiasi altro codice, per tornare?Se sapete aiutarmi, per favore.

È stato utile?

Soluzione

Come ha detto Andrey, c'è una pila di visualizzazione, quindi se si preme schermi senza di loro popping, rimarranno in pila, quindi chiudendo schermata corrente, schermata precedente verrà mostrato automattically, e se non c'è prev. schermo, l'applicazione si chiude.

Tuttavia non è bene tenere molti schermi nello stack di visualizzazione, in modo da poter implementare tipo di pila all'interno di schermi, per gestire la navigazione manualmente.

class schermo astratto per l'implementazione dello stack dello schermo:

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

Esempio prima schermata:

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

Esempio secondo schermo:

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

Altri suggerimenti

Il BlackBerry mantiene una pila di schermi; la visualizzazione dello stack.

Gli schermi sono spuntati sullo stack, e spuntato fuori il camino attraverso il UiApplication responsabile di loro. Popping l'ultimo screen off stack chiude l'applicazione di default.

Se si esegue un UiApplication, denominato MyUiApplication, è possibile aggiungere alla schermata di stack chiamando pushScreen(nuovo SomeScreen());

Lo schermo, se derivata da MainScreen, come la maggior parte dei BlackBerry schermi sono, è creato con la DEFAULT_CLOSE bandiera, il che significa che il Tasto esc sul BlackBerry naturalmente, chiudere la schermata, causando popScreen() per essere chiamato.È possibile, naturalmente, chiamata popScreen() in seguito a qualsiasi pressione di un tasto o la rotellina/trackball fare clic su.Lo schermo può anche chiamare close() su se stessa, che ha lo stesso risultato;lo schermo è spuntato fuori dello stack, restituendo l'applicazione alla schermata precedente, o di terminare l'applicazione se l'ultima schermata è spuntato fuori il display dello stack.

Se l'applicazione non viene creato come un UiApplication, o se lo schermo è stato inizialmente spinto sul display stack da un non-thread dell'interfaccia utente (ad esempio un thread in background), quindi è necessario assicurarsi che la chiamata per chiudere la schermata è anche fatto dal thread dell'interfaccia utente.Questo può essere fatto facendo in modo che il eventLock sulla Applicazione classe prima di eseguire qualsiasi operazione di interfaccia utente (uno in genere chiamata invokeLater così, in questa situazione).

Se la schermata originale era spuntato sulla pila globale schermo (non modale, in cima a tutte le altre schermate), allora deve essere estratto dallo stack di utilizzare qualcosa come:

Interfaccia utente.getUiEngine().dismissStatus(questo);

In ogni caso, l'override onClose() e close() di derivata Schermo vi permetterà di intercettare il verificarsi eccezione per il debug e analisi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top