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 (), есть ли другой способ исправить это?

Solutions Collecting From Web of "SavedInstanceState при восстановлении фрагмента из заднего стека"

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 и помещая данные там для эквивалента «глобальных переменных» …