2010-09-11 14 views
6

Come ripristinare la finestra di dialogo ecc. Dopo aver ruotato lo schermo? Ad esempio, fai comparire un alertDialog per comunicare all'utente alcune informazioni. quindi l'utente ruota lo schermo in un altro orientamento. Come ripristinare l'alertDialog? Qualcuno può guidarmi a farlo? Grazie!Android: dialogo ecc. Ripristino dopo la rotazione modificato

aggiunti in seguito:

ho guardato nel codice sorgente di Android e trovare queste cose:

finestre di dialogo sono memorizzati in mManagedDialogs, e le informazioni relative sono:

mManagedDialogs = new SparseArray<ManagedDialog>(); 

onSaveInstanceState correlati:

final void performSaveInstanceState(Bundle outState) { 
    onSaveInstanceState(outState); 
    saveManagedDialogs(outState); 
} 

In saveManagedDialogs, ha qualcosa a che fare con mManagedDialogs.

onRestoreInstanceState correlato:

final void performRestoreInstanceState(Bundle savedInstanceState) { 
    onRestoreInstanceState(savedInstanceState); 
    restoreManagedDialogs(savedInstanceState); 
} 

In restoreManagedDialogs, ha qualcosa a che fare con mManagedDialogs.

Come si può vedere, per la funzione avanzata, è necessario fare il lavoro salvataggio e il ripristino da soli. Potrebbe essere una cavalla notturna quando hai tonnellate di dialoghi personalizzati. Non ho provato la complessa finestra di dialogo (ho inserito EdiText, listView, diciamo). In questo modo, vorrei avvisare gli utenti: non ruotare mai lo schermo quando si inseriscono le informazioni nella finestra di dialogo ... O, bloccare la rotazione dinamicamente quando si visualizza la finestra di dialogo.

Grazie per tutte le persone che mi hanno risposto. Spero che le mie informazioni possano aiutarti anche tu.

+1

Come risolvere questo problema al giorno d'oggi: http://stackoverflow.com/a/15729764/842697 –

risposta

-16

L'approccio che ho preso è stato quello di non permettere al sistema operativo di riavviare l'attività dopo la modifica della configurazione di layout. Per fare questo, aggiungere la seguente riga all'interno di attività che si desidera impedire riavvio nel file manifest:

<activity 
android:configChanges="orientation|keyboard" 
... 
> 

Opzionalmente, è possibile gestire il cambiamento di configurazione nel codice nel caso in cui ci sono alcuni layout di modifiche che si desidera effettuare manualmente , come ricaricare una nuova vista da XML. Questo viene fatto sovrascrivendo il metodo onConfigurationChanged() nella classe di attività:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    //Handle config changes here, paying attention to 
    //the newConfig.orientation value 
    super.onConfigurationChanged(newConfig); 
} 

Edit: Aggiunto "| tastiera" alla lista di configurazione cambia

+0

No, questa modifica al file manifesto si ferma semplicemente Android riavvio vostra attività quando quella particolare configurazione cambiamento (orientamento) si verifica. Non fermerà la rotazione dello schermo.Si potrebbe anche voler aggiungere "tastiera" per i telefoni con una tastiera a scomparsa, in quanto ciò attiverà anche un riavvio. –

+0

Hai ragione! Ho aggiunto android: configChanges = "orientation | keyboard" e funziona! Grazie mille! –

+13

Funziona ma non consigliato. –

5
+0

Si prega di consultare il mio testo successivo aggiunto. –

+0

+1 per questo. Sono stato persino in grado di annidare i miei dialoghi: il pulsante positivo della prima finestra di dialogo avvia una finestra di dialogo "Conferma" poiché l'operazione comporta la cancellazione dei dati. – barry

+0

Obsoleto in API 13 ("Usa invece DialogFragment") – Jeremy

-5

Aggiungi come questo nella tua tag attività nel manifestare

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/> 
Problemi correlati