1

В моей программе, у меня есть следующая иерархия:Фрагменты в не восстанавливаются после изменения ориентации

Activity 
    Fragment 
     ViewPager + FragmentStatePagerAdapter 
      Fragment containing video 

фрагмента, который непосредственно вложен в деятельности инициализируется с использованием setRetainInstance (истина). Это привело к сбою при переключении ориентации. Используется решение, описанное в отчете об ошибке: https://code.google.com/p/android/issues/detail?id=42601#c10.

Тем не менее, приложение будет разбиваться, когда я переключу ориентацию. Я нашел еще один отчет об ошибке +: https://code.google.com/p/android/issues/detail?id=42601#c32.

После применения этого решения я смог повернуть устройство без сбоя приложения. Однако глубоко вложенный фрагмент не сохранил своего состояния. Поскольку этот фрагмент содержит видео, которое должно продолжаться, несмотря на изменение ориентации, это необходимо. Я нашел третий отчет об ошибке, описывающий это, известная проблема в версиях поддерживающих библиотек поддержки Android 20: up https://code.google.com/p/android/issues/detail?id=74222#c17

Теперь кажется, что самый глубокий фрагмент сохраняет какое-то состояние. По крайней мере, он не разрушается, так как звук видео продолжает воспроизводиться повсюду и после изменения ориентации. Однако после изменения ориентации фрагмент не восстанавливается. Я просто вижу белый прямоугольник, где должно быть видео.

Как вы можете видеть, это становится нелепым. Мне уже пришлось использовать три взломанных решения для ошибок в классе ViewPager, и он все еще не работает должным образом. Если кто-нибудь знает, что еще я могу попробовать, я буду очень признателен.

ответ

0

В конце концов, я не нашел решение проблемы. Я решил проблему, сохранив состояние вложенных фрагментов в родительском фрагменте, который правильно сохраняет состояние. Чтобы сделать это, я сделал следующее:

  • Добавить HashMap к родительскому фрагменту
  • Гав каждый фрагмент уникального идентификатора строку, которая может быть восстановлена, когда фрагмент был воссоздан
  • создал объект состояния для всех вложенные фрагменты в свой метод onCreate и добавили его в HashMap в родительском фрагменте. Или, если ((ParentFragment) getParentFragment()). StateMap.contains (id), восстановить существующее состояние.
  • Перемещены все переменные-члены вложенного фрагмента в StateObjects
Смежные вопросы