2009-12-18 12 views
7

Nella mia attività, mi piacerebbe mostrare semplici finestre di dialogo informazioni, cose del genere:Visualizzazione semplici finestre di dialogo dei messaggi

new AlertDialog.Builder(context).setMessage(message).show(); 

se lo faccio, la finestra di dialogo colerà quando ho ruotare quel telefono (per non parlare di esso scomparirà, quindi l'utente potrebbe non vederlo). Posso usare le finestre di dialogo gestite, ma non sono sicuro di come lo si utilizza in modo ragionevole per questi tipi di messaggi brevi? Sembra che tu devi fare questo:

showDialog(SOME_DLG_ID); 
... 
@Override 
onCreateDialog(int id) { 
    if (id == SOME_DLG_ID) { 
     new AlertDialog.Builder(context).setMessage(message).show(); 
    } 
} 

non c'è modo di passare quello che il messaggio deve essere in onCreateDialog fin dalla sua un metodo di sostituzione. Non vorrei creare una variabile membro dell'attività genitore che memorizza solo ciò che dovrebbe essere il messaggio corrente. Come lo fate tutti?

Grazie

+0

Credo che tu sia bloccato con l'opzione variabile membro ... mi dispiace. – rui

+0

sì sembra così, che vergogna! Grazie – Mark

+0

Yup! Questo è un peccato per lo sviluppatore. Abbiamo bisogno di codificare in uno schema così strano solo per mostrare la finestra di dialogo. –

risposta

3

È possibile implementare Activity.onPrepareDialog(int, Dialog) per passare il messaggio prima che la finestra di dialogo viene visualizzata sullo schermo. Così si potrebbe fare qualcosa di simile:

@Override protected void onPrepareDialog(int id, Dialog dialog) { 
    if (id == SOME_DLG_ID) { 
     ((AlertDialog) dialog).setMessage(message); 
    } 
} 

Dovreste ancora tenere traccia del messaggio che si sta mostrando corrente nella vostra attività, ma almeno in questo modo, non si sta creando un oggetto di dialogo per ciascun messaggio che vuoi mostrare.

+1

Beh, il problema qui è lo stesso, non puoi passare il messaggio di stringa che hai al punto che chiami showDialog() a onPrepareDialog o onCreateDialog() ... – rui

+0

Ah, mio ​​male ... Suppongo di aver frainteso la domanda . –

+0

Sì e questo è il problema principale in realtà, hai bisogno di questo strano modello per ottenere la stringa di messaggi dinamici nella finestra di dialogo - è davvero imbarazzante! Grazie – Mark

4

se lo faccio, la finestra di dialogo colerà quando ho ruotare quel telefono (per non parlare sparirà pure, in modo l'utente può perdere)

È possibile aggiungere

<activity 
    android:configChanges="orientation|keyboardHidden" 
> 

per AndroidManifest.xml per impedire il riavvio dell'attività quando il telefono ruota. Lo sto usando nella mia app e il mio AlertDialog sopravvive alla rotazione del telefono.

+0

sì, android: configChanges = "orientation" è la strada da percorrere. impedisce l'esecuzione di "onCreate" e consente all'app di rimanere nello stesso stato durante la rotazione del telefono – datayeah

0

L'utilizzo di DialogFragment per gestire la finestra di dialogo garantisce che gestisca correttamente gli eventi del ciclo di vita, ad esempio quando l'utente ruota lo schermo o preme il pulsante Indietro.

Problemi correlati