Generalmente, quando la vista dell'interfaccia utente non mantiene il suo stato, la prima cosa da verificare è che questa vista dell'interfaccia utente ha un ID assegnato. Senza questa view ID non è possibile ripristinare il loro stato.
<EditText android:id="@+id/text" ... />
Se questo non risolve il problema, è necessario salvare e ripristinare lo stato te stesso. Dai un'occhiata a Handling Runtime Changes. Spiega più o meno quello che si dovrebbe fare:
Per gestire correttamente un riavvio, è importante che la vostra attività ripristina lo stato precedente attraverso il normale ciclo di vita di attività, in cui Android chiama onSaveInstanceState()
prima che distrugge la vostra attività in modo da può salvare dati sullo stato dell'applicazione. È quindi possibile ripristinare lo stato durante onCreate()
o onRestoreInstanceState()
. Per verificare che l'applicazione si riavvii con lo stato dell'applicazione intatto, è necessario richiamare le modifiche alla configurazione (come la modifica dell'orientamento dello schermo) durante l'esecuzione di varie attività nell'applicazione.
Si dovrebbe ignorare onSaveInstanceState()
e salvare il vostro stato acitivity quando la sua chiamata:
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
E poi ripristinare lo stato in onCreate()
o onRestoreInstanceState()
:
public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
Se questo non è ancora sufficiente, è possibile ignorare onRetainNonConfigurationInstance()
e restituire qualsiasi oggetto personalizzato che sarà pa ssed al nuovo oggetto activity, quando è ricreato. Maggiori dettagli su come usarlo possono essere trovati in Handling Runtime Changes. Ma questa funzione è deprecata in Android 3.0+ (in particolare per FragmentActivity
dove è il suo finale). Quindi questo non può essere usato insieme a Fragments (che va bene, hanno il loro meccanismo per conservare gli oggetti attraverso le modifiche alla configurazione).
E uno finale: non utilizzare mai android:configChanges
. Devi avere ottime ragioni per usarlo, e solitamente questi sono i motivi di prestazione. Non è stato pensato per essere abusato come è ora: solo per prevenire il reset dello stato dell'interfaccia utente. Se si utilizza questo attributo, allora sì, l'interfaccia utente di Attività non verrà reimpostata sul cambiamento di configurazione, ma lo stato di attività verrà comunque ripristinato una volta distrutto e ricreato in seguito.
La documentazione spiega questa opzione abbastanza bene:
Nota: la gestione della configurazione di cambiare voi stessi può rendere molto più difficile da usare risorse alternative, in quanto il sistema non li applica automaticamente per voi. Questa tecnica dovrebbe essere considerata ultima risorsa e non è raccomandato per maggior parte delle applicazioni
Ok, sembra un approccio migliore. Posso usare questo per la bitmap, e quindi l'edittext non sarà un problema - Ma quale funzione dovrei usare per salvare lo stato dell'immagine? – Sebastian
Se la bitmap viene salvata su disco, basta salvare il percorso in bitmap nella funzione 'onSaveInstanceState()'. Se la bitmap è in memoria, puoi usare 'onRetainNonConfigurationInstance()'. – inazaruk