Innanzitutto, è necessario determinare quale sia effettivamente lo "stato" nell'app. Non hai detto cosa stai facendo in realtà, ma lascia che l'ArrayList degli oggetti sia lo stato con cui l'utente sta lavorando.
In secondo luogo, decidere quale sia effettivamente il ciclo di vita di questo stato. E 'davvero legato a quell'attività? O l'utente non dovrebbe perderlo se dice che la sua batteria si scarica, il dispositivo si spegne e successivamente torna alla tua app? Se il primo, onSaveInstanceState()
è corretto; se quest'ultimo, si desidera salvare in memoria persistente in onPause()
.
Per onSaveInstanceState()
con oggetti personalizzati, la chiave è implementare l'interfaccia Parcelable
. Ciò comporta l'implementazione dei metodi su Parcelable, oltre a creare un oggetto CREATOR statico nella classe. Ecco il codice per una tipica classe Parcelable semplice:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java
Le funzioni dei tasti sono l'attuazione Parcelable:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#317
e la classe statica Creatore:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#355
(The static writeToParcel()
e readFromParcel()
sono solo comodità che sono state fatte per quella classe e non richieste.)
Ora che avete che, si può mettere la vostra intera ArrayList di oggetti nel Bundle stato salvato con Bundle.putParcelableArrayList
:
http://developer.android.com/reference/android/os/Bundle.html#putParcelableArrayList(java.lang.String, java.util.ArrayList)
In Activity.onCreate()
, controllare per vedere se si dispone di un savedState Bundle
, e se quindi prova a recuperare ArrayList da quello e usalo se trovato, creando un nuovo adattatore e la visualizzazione elenco per la nuova attività che vengono utilizzati per visualizzarlo.
Nota che onRetainNonConfigurationInstance() dovrebbe * solo * essere utilizzato come ottimizzazione. La tua app dovrebbe funzionare anche se ciò non accade ... perché non c'è * nessuna * garanzia che lo farà, e in effetti molte situazioni in cui sicuramente non verrà chiamato. Per prima cosa, la tua app deve funzionare correttamente attraverso il meccanismo dello stato salvato completo e implementare questo metodo solo come ottimizzazione. – hackbod
Il link sopra non è disponibile. Puoi darmi qualche altro link? – Debopam
Questi metodi sono deprecati ... –