Подтвердить что ты не робот

Сохранить объект при изменении ориентации

Как сохранить объект при изменении ориентации, поскольку onRetainNonConfigurationInstance и getLastNonConfigurationInstance устарели. И что я не могу использовать с compatibility package android-support-v4.jar FragmentActivity, где он показывает Cannot override the final method from FragmentActivity

сайт разработчика говорит

Вместо этого используйте новый API-интерфейс фрагмента setRetainInstance (boolean);

Но я не знаю, как сохранить пользовательский объект, используя setRetainInstance

Мой сценарий:
В моей деятельности у меня есть AsyncTask с диалоговом индикатором прогресса. Здесь мне нужно обработать изменение ориентации.
Для этого я получил очень хороший ответ от Марка Мерфи, CommonsWare
background-task-progress-dialog-orientation-change-is-there-any-100-working,
с пример проекта

Поскольку я использую пакет совместимости android-support-v4.jar, FragmentActivity, я не могу переопределить onRetainNonConfigurationInstance
Невозможно переопределить конечный метод из FragmentActivity

Есть ли альтернативный метод для сохранения моего пользовательского объекта?

EDIT: Я не могу выполнить задачу AsyncTask Parcelable (если я не ошибаюсь), поскольку она использует интерфейс, контекст и т.д. Мой AsyncTask

 public class CommonAsyncTask extends AsyncTask<Object, Object, Object>  {
        Context context;
        AsyncTaskServices callerObject;
        ProgressDialog progressDialog;
        String dialogMessag ; 
    ................

Я ищу, есть ли альтернативы метода onRetainNonConfigurationInstance, которые полностью сохраняют объект во время изменения ориентации и позже могут быть получены с помощью getLastNonConfigurationInstance

4b9b3361

Ответ 1

Существует две альтернативы:

  • Используйте Loader. FragmentActivity позаботится о сохранении/восстановлении его состояния при повторном создании.
  • Используйте фрагмент без представления и вызывайте setRetainInstance(true) на нем. Вот пример этого в источнике библиотеки совместимости, FragmentRetainInstanceSupport или некоторых таких.

Ответ 2

Вы можете использовать onRetainCustomNonConfigurationInstance.

Используйте это вместо onRetainNonConfigurationInstance(). Получить позже с getLastCustomNonConfigurationInstance().

Ответ 3

Когда ваш фрагмент приостановлен, он вызовет этот метод:

@Override
public void onSaveInstanceState(Bundle outState) {
    // Add variable to outState here
    super.onSaveInstanceState(outState);
}

Затем переменная outState будет передана в метод onCreate(), когда Фрагмент перезапустится.

Вы можете сохранить любые данные, которые являются базовыми, или реализует интерфейс Parcelable

Ответ 4

Ну, цитата из Android Developers' References:

Этот метод вызывается после onStart(), когда активность повторно инициализируется из ранее сохраненного состояния, приведенного здесь в savedInstanceState. Большинство реализаций будут просто использовать onCreate (Bundle), чтобы восстановить их состояние, но иногда удобно делать это здесь после завершения инициализации или разрешить подклассам решать, использовать ли ваши настройки по умолчанию реализация. По умолчанию реализация этого метода выполняет восстановление любого состояния представления, которое ранее было заморожено onSaveInstanceState (Bundle).

Что касается использования onSaveInstanceState(), лучше вернуть свои объекты/вещи, используя onRestoreInstanceState() вместо этого.

Обратитесь к Activity # onRestoreInstanceState()