У меня есть фрагмент, который находится внутри действия.Когда пользователь нажимает кнопку «Назад», мне нужно сохранить данные модели и сделать их доступными при следующем открытии фрагмента / действия.Но только в приложении его не нужно сохранять на диске.Так, например, если пользователь уничтожил процесс, то нет необходимости сохранять данные модели, они могут быть снова получены из сети.
что я пробовал: icePick и onSavedInstance
звонки, но они, кажется, не срабатывают, когда пользователь нажимает кнопку возврата на фрагменте.скажи мне, если я не прав.
вот что я реализовал в своем фрагменте:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("myModel", Parcels.wrap(myModel));
}
Я использую библиотеку parceler , если это имеет какое-либо значение.Я также могу преобразовать код в kotlin, если требуется. когда я нажимаю кнопку "Назад", фрагмент извлекается из стека, и действие, содержащее его, вызывает onDestroy, но я не получаю никакого обратного вызова в onSaveInstanceState.Также, когда я проверяю, onCreate()
savedInstanceState
имеет значение null. Я не переопределил onSavedInstance
в активности, только во фрагменте.Что я делаю неправильно ?
У меня была хотя бы возможность использовать базу данных для этого, но мне просто нужно, чтобы она находилась в памяти, и должен быть способ сделать это без БД.
из того, что я узнал, если пользователь нажимает кнопку «Назад», onSaveInstance не вызывается системой:
Если действие находится на переднем плане, а пользователь нажимает кнопку «Назад»,действия переходят через обратные вызовы onPause (), onStop () и onDestroy ().Помимо уничтожения, действие также удаляется из заднего стека.
Важно отметить, что по умолчанию обратный вызов onSaveInstanceState () в этом случае не срабатывает.
источник: здесь