Во-первых, вам нужно определить, что на самом деле является «состоянием» в вашем приложении. Вы не сказали, что на самом деле делаете, но позвольте мне предположить, что ArrayList объектов - это состояние, с которым работает пользователь.
Во-вторых, решите, каков жизненный цикл этого состояния на самом деле. Это действительно связано с этой деятельностью? Или пользователь не должен потерять его, если, скажем, его батарея разряжена, устройство выключается, и они позже возвращаются в ваше приложение? Если первое, onSaveInstanceState()
правильно; если последнее, вы хотите сохранить в постоянном хранилище в onPause()
.
Для onSaveInstanceState()
с пользовательскими объектами ключ заключается в реализации интерфейса Parcelable
. Это включает в себя реализацию методов в Parcelable, а также создание статического объекта CREATOR в вашем классе. Вот код для типичного простого класса Parcelable:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java
Ключевые функции - реализация Parcelable:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#317
и статический класс CREATOR:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/ComponentName.java#355
(Статические writeToParcel()
и readFromParcel()
- просто удобства, которые были сделаны для этого класса и не требуются.)
Теперь, когда у вас есть это, вы можете поместить весь ваш ArrayList объектов в сохраненный пакет состояния с помощью Bundle.putParcelableArrayList
:
http://developer.android.com/reference/android/os/Bundle.html#putParcelableArrayList(java.lang.String, java.util.ArrayList)
В Activity.onCreate()
проверьте, есть ли у вас savedState Bundle
, и если это так, попробуйте извлечь ArrayList из него и использовать его, если он найден, создав новый адаптер и представление списка для нового действия, которое используется для показать его.