Intereting Posts
Мой проект Android Studio поддерживает запуск моего старого проекта / приложения Запустить приложение Android для разблокировки экрана Существующие тесты пользовательского интерфейса Android перестали работать после перехода на AndroidJUnitRunner Обнаружение начала прокрутки и завершения прокрутки в режиме recyclerview Android: ItemizedOverlay onTouchEvent и onTap перекрываются Dropbox SDK для Android: не удается найти AndroidAuthSession Как определить частоту обновлений SyncAdapter на Android? Не удается разрешить символ FragmentCompat Как исправить исходный шрифт в Android Lollipop при работе с пользовательскими шрифтами значков? Как изменить ключ, используемый для подписания приложения Android, которое уже находится в магазине воспроизведения? Как использовать создателей в ConstraintLayout Двухпроходный макет интерфейса: почему? Проверьте семейство объекта Typeface в Android ActionBarActivity и FragmentActivity … «Неконвертируемые типы»? Подсказка подсказки NavigationDrawer (например, Google Currents)

SavedInstanceState при восстановлении фрагмента из заднего стека

Могу ли я использовать savedInstanceState() для сохранения состояния при удалении фрагмента, а затем восстановить состояние, когда я выталкиваю фрагмент из заднего стека? Когда я восстанавливаю фрагмент из заднего стека, пакет savedInstanceState всегда равен нулю.

Прямо сейчас поток приложения: созданный фрагмент -> удаленный фрагмент (добавлен в задний стек) -> восстановлен фрагмент из заднего стека (пакет savedInstanceState равен null).

Вот соответствующий код:

 public void onActivityCreated(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); Long playlistId = bundle.getLong(Constants.PLAYLIST_ID); int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID); if (savedInstanceState == null) { selectedVideoNumber = playlistItemId; } else { selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO"); } } public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber); } 

Я думаю, проблема в том, что onSavedInstanceState() никогда не вызывается при удалении и добавлении в задний стек. Если я не могу использовать onsavedInstanceState (), есть ли другой способ исправить это?

OnSaveInstanceState (к сожалению) не вызывается при нормальном повторном создании фрагмента. Просмотрите http://developer.android.com/guide/components/fragments.html#Creating и ответ на вопрос: Как сохранить состояние фрагмента при добавлении в задний стек?

Мне нравится сохранять представление I в onCreateView как глобальную переменную, а затем, когда я возвращаюсь, я просто проверяю это:

 if(mBaseView != null) { // Remove the view from the parent ((ViewGroup)mBaseView.getParent()).removeView(mBaseView); // Return it return mBaseView; } 

Проблема в том, что фрагмент должен иметь связанный с ним Id или Tag чтобы FragmentManager отслеживал его.

Существует не менее 3 способов сделать это:

  1. В макете xml объявите Id для вашего фрагмента:

     android:id=@+id/<Id> 
  2. Если в вашем контейнере фрагментов есть Id , используйте FragmentTransaction :

     FragmentTransaction add (int containerViewId, Fragment fragment) 
  3. Если ваш фрагмент не связан с каким-либо View (например, безголовым фрагментом), дайте ему Tag :

     FragmentTransaction add (Fragment fragment, String tag) 

Также см. Этот ответ SO.

FWIW, я тоже это ударил, но в моем случае onSaveInstanceState был вызван правильно, и я ввел данные своего состояния, когда новый новый фрагмент активности был взят на смартфоне. Точно так же, как вы, onActivityCreated был вызван w / savedInstanceState всегда null. ИМХО, я думаю, что это ошибка.

Я работал вокруг него, создавая статическое состояние MyApplication и помещая данные там для эквивалента «глобальных переменных» …