Primero, debe determinar qué es realmente el "estado" en su aplicación. No ha dicho lo que está haciendo en realidad, pero déjeme suponer que ArrayList de objetos es el estado con el que está trabajando el usuario.
En segundo lugar, decida cuál es realmente el ciclo de vida de este estado. ¿Está realmente vinculado a esa actividad? ¿O el usuario no debería perderlo si la batería baja, el dispositivo se apaga y luego vuelve a su aplicación? Si el primero, onSaveInstanceState()
es correcto; en este último caso, deseará guardar en el almacenamiento permanente en onPause()
.
Para onSaveInstanceState()
con objetos personalizados, la clave es implementar la interfaz Parcelable
. Esto implica implementar los métodos en Parcelable, así como crear un objeto CREATOR estático en su clase. Aquí está el código para una clase parcelable sencilla típica:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java
Las funciones principales son la implementación parcelable:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#317
y la clase estática CREADOR:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#355
(El estático writeToParcel()
y readFromParcel()
son solo comodidades que se hicieron para esa clase y no son obligatorias.)
Ahora que tiene eso, se puede poner toda su ArrayList de objetos en el archivo de estado guardado con Bundle.putParcelableArrayList
:
http://developer.android.com/reference/android/os/Bundle.html#putParcelableArrayList(java.lang.String, java.util.ArrayList)
En Activity.onCreate()
, comprobar para ver si tiene un savedState Bundle
, y si intente recuperar ArrayList de eso y utilícelo si lo encuentra, creando un nuevo adaptador y vista de lista para la nueva actividad que se usa para mostrarlo.
Tenga en cuenta que onRetainNonConfigurationInstance() debe * * Sólo puede utilizar como una optimización. Su aplicación debería funcionar incluso si esto no ocurre ... porque no hay * garantía * de que así sea y, de hecho, muchas situaciones en las que definitivamente no se llamará. Primero debe hacer que su aplicación funcione correctamente a través del mecanismo de estado completo guardado, y solo implemente este método como una optimización. – hackbod
El enlace de arriba no está disponible. ¿Puedes darme otro enlace? – Debopam
Esos métodos están en desuso ... –