Я столкнулся с неприятной проблемой, пытаясь сохранить состояние с помощью onSaveInstanceState (), поэтому я решил предложить свой сценарий и ответить на свой вопрос, чтобы помочь другим. (Код на Kotlin, но понятия те же)
У меня есть несколько фрагментов, которые пользователь может переключать с помощью экранной навигации. Чтобы запомнить, где находится пользователь, я сохраняю местоположение в onSaveInstanceState ()
override fun onSaveInstanceState(savedInstanceState: Bundle?){
super.onSaveInstanceState(savedInstanceState)
Log.d(TAG, "whereAreWe ${appLocation.name}")
with(savedInstanceState!!){
putInt("whereAreWe", appLocation.ordinal)
putString("questionStatistics", questionStatistics.toString())
}
}
Итак, когда пользователь поворачивает экран или переходит обратно в приложение от нажатия кнопки «домой» (в onCreate ()):
....
if(savedInstanceState == null){
Log.d(TAG, "Opening Dashboard")
appLocation = AppLocation.DASHBOARD
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, DashboardFragment(), DashboardFragment.TAG).commit()
}
else {
appLocation = AppLocation.values()[savedInstanceState.getInt("whereAreWe")]
Log.d(TAG, "Opening Fragment: ${appLocation.name}")
when (appLocation) {
AppLocation.DASHBOARD -> supportFragmentManager.beginTransaction().replace(R.id.fragment_holder,
supportFragmentManager.findFragmentByTag(DashboardFragment.TAG),
DashboardFragment.TAG).commit()
......
И все работало отлично, когда пользователь поворачивал экран, его местоположение запоминалось, и приложение перемещало их к соответствующему фрагменту.
НО , когда пользователь нажал кнопку «Домой» на телефоне, а затем вернулся обратно к приложению, onSaveInstanceState () не вызывался, и так как saveInstanceState был нулевым, пользователь будет вынужден вернуться к фрагмент главной панели приборов.
Я искал в Интернете решение, но ни один сценарий не соответствовал моему: где он работал для изменения ориентации экрана, но не после нажатия главного экрана.