2012-03-18 8 views
10

Im new to android. Ho scritto un paio di programmi e li ho provati sul mio telefono. Quando cambio orientamento, il mio telefono riavvia il programma. Tutte le mie variabili vengono ripristinate. In effetti, l'unica cosa che non si resetta è il testo che si trova nelle viste del testo di modifica. Che cosa causa questo? Come posso fermarlo? Ho provato a cercarlo su google e su overflow dello stack, ma tutto quello che sto vedendo è come l'orientamento della vista dal cambiare tutti insieme. Ho anche provato, in un programma, a impostare le mie variabili con il metodo get text, ma questo non funziona.Perdita di variabili degli orientamenti di commutazione

+1

Vedere la mia risposta qui http://stackoverflow.com/questions/6764086/setting-the -background-of-an-activity –

risposta

8

Quando si cambia orientamento come il mio telefono riavvia il programma.

Bene per essere precisi, il Activity attualmente visibile è completamente distrutto e ricreato. Altri componenti della tua "applicazione" potrebbero non essere interessati.

Quali sono le cause? Come posso fermarlo?

È di progettazione e come per fermarlo, si può o non si vuole farlo.

Come è stato menzionato, è possibile specificare che si desidera gestire le modifiche di "configurazione" (come l'orientamento) o addirittura forzarne solo una (ad esempio, orizzontale o verticale).

In molti casi, tuttavia, uno sviluppatore di app può scegliere di modificare un layout in base al fatto che un dispositivo sia in un orientamento o in un altro. Alcuni layout possono funzionare bene in verticale ma non in orizzontale (o viceversa) e lo scopo dell'approccio progettato (distruggere/ricreare l'attuale visibile Activity) è pensato per adattarlo.

Se uno sviluppatore sceglie di non gestire le modifiche di configurazione o impone uno specifico orientamento, il modo corretto di gestire le cose è assicurarsi che tutti i dati inseriti negli elementi dell'interfaccia utente "volatili" (come EditTexts) siano correttamente salvati e ricreati dopo il cambio di orientamento.

Per fare ciò, la comprensione del ciclo di vita Activity è essenziale poiché si utilizzano i vari metodi Activity richiamati durante tutto il ciclo di vita per salvare/ripristinare i dati.

Leggere essenziali ...

Runtime Changes

Activity Lifecycle

Application Fundamentals

+0

Grazie per la bella risposta completa e le condizioni! Rende completo dal momento che il motivo. Devo essere onesto però. Mi perdo leggendo le pagine degli sviluppatori e non capisco la maggior parte di ciò che stanno dicendo, a meno che non abbia una buona conoscenza di base e comprensione in anticipo. Imparo meglio da esempi ed esercitazioni. AND OF COURSE giocando con i metodi. – JBreezy901

+0

@ JBreezy901: capisco esattamente cosa intendi per le pagine degli sviluppatori. Ero nello stesso posto 16 mesi fa, quando ho iniziato per la prima volta con Android e anche ora probabilmente ho lavorato solo su una piccola percentuale di ciò che è lì (e solo le cose di cui ho avuto bisogno fino ad ora). La documentazione di Application Fundamentals insieme a quella dell'attività e del suo ciclo di vita meritano sicuramente di essere segnalati. Sono contento di aver fatto un po 'di luce, di divertirmi. – Squonk

2

Questo è design, onCreate verrà chiamato quando si modifica l'orientamento. Se ciò non è desiderato, è possibile impostarlo in modo che non risponda alle modifiche di orientamento in AndroidManifest.xml, pertanto l'attività non verrà ricreata, l'impostazione di android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" per la propria attività la limiterà alla modalità verticale.

Per ulteriori informazioni sulle impostazioni, vedere this.

4

assicurati di implementare onSaveInstanceState e preparati a ripristinare la tua attività da un Bundle in onCreate e sarai tutto pronto. questi saranno chiamati durante la rotazione, quindi avrai una nuova attività in seguito, ma se hai salvato il tuo stato e puoi ripristinarlo, niente di cui preoccuparsi.

+0

Voglio ancora che il mio programma riprenda il suo layout quando si passa da un ritratto e paesaggio. Tutto ciò che voglio essere salvato sono le mie variabili. Soprattutto. Funzionerà? – JBreezy901

+0

sì, se metti tutte le tue variabili in quel pacchetto, e poi nel tuo metodo 'onCreate' recuperale dal bundle invece di inizializzare la tua attività da zero, sarai tutto pronto. – dldnh

2

See this answer: cercare la risposta di Robert. Questo è esattamente quello che devi fare.

+0

[permalink] (http://stackoverflow.com/a/4101501/1318194) – stackunderflow

0

Meglio aggiungere android:configChanges="keyboardHidden|orientation|screenSize" to AndroidManifest.xml in attività

Problemi correlati