2014-11-30 4 views
1

ПроблемыonSaveInstanceState вызывается после фрагмента заменен

onSaveInstanceState вызываются при повороте устройства для фрагмента, который был заменен в транзакции фрагмента. Это вызывает IllegalStateException с сообщением «Содержимое зрения еще не создан.

Исследования

Я нашел следующие два ответа, которые кажутся наиболее актуальными

Using onSaveInstanceState with fragments in backstack?

onSaveInstanceState of previous fragment is called on-orientation of current fragment

Что я пробовал уже

После ответа на второй вопрос я удалил addtobackstack из транзакции фрагмента, но все равно получаю ошибку.

Я прочитал принятый ответ на первый вопрос, но не уверен, как получить ссылку на фрагмент внутри onSaveInstanceState для активности. Я также особо не хочу сохранять этот фрагмент, когда пользователь покидает этот фрагмент, его состояние не нужно сохранять.

Я также попытался добавить if (getView() != null) {...} к onSaveInstanceState во фрагменте, но это не имело значения.

Вопросы

  1. Почему onSaveInstanceState называют даже если фрагмент не был добавлен в стек обратно?
  2. Правильный подход к тому, чтобы каким-то образом убить фрагмент, когда пользователь покончил с этим?
  3. Есть ли другое решение?

Заранее благодарю вас за помощь.

Эндрю

Редактировать

Если удалить addtobackstack(null) от операции, которая добавляет фрагмент и тот, в котором она снимается проблема уходит, но потом так же важная часть функциональности .. . Я мог бы добавить этот случай к моей функции onBackPressed override, но это кажется немного взломанным, и не в хорошем смысле.

ответ

0

Добавление проверки isVisible() в файлеSaveInstanceState фрагмента в backstack должно работать.

Не нужно сохранять состояние экземпляра, когда оно не видно.

Смежные вопросы