У меня есть приложение с двумя вкладками, содержащими фрагменты. Я использую FragmentPagerAdapter для управления изменениями вкладок. Все работает отлично с двумя вкладками.Восстановление фрагмента с помощью FragmentPagerAdapter
Недавно я добавил третью вкладку, и у меня проблемы. tab1 (фрагмент1) представляет собой LinearLayout небольших фрагментов. tab2 (фрагмент2) - это простой макет текста. tab3 (фрагмент3) также является простым оформлением текста.
Если я переключаюсь между tab1 и tab2, оба работают правильно и сохраняют свои состояния. Однако, если я переключаюсь между tab1 и tab3, tab3 показывает текст правильно, но tab1 показывает пустую вкладку.
Я знаю, что если вкладка занимает более 1 позиции от текущей позиции, фрагмент будет уничтожен, и фрагмент нужно будет воссоздать. FragmentPagerAdapter
не делает это автоматически?
Я обнаружил, что если я поверну устройство (с выбранным tab1), фрагмент tab1 будет восстановлен с правильным состоянием, чтобы фрагмент не был уничтожен. Кажется, что есть проблема с неправильным воссозданием макета ViewPager
, но это только предположение.
В качестве работы я установил myViewPager.setOffscreenPageLimit(2)
и расположение сохранилось. Я бы хотел, чтобы это работало, поскольку я думаю, что он должен был не заставлять фрагменты оставаться в памяти.
У меня уже установленRetainInstance (true) на фрагменте tab1, но я думаю, что я не могу установить его на фрагменты, встроенные внутри фрагмента вкладки. Основной фрагмент действительно есть, элементы меню для этой вкладки создаются правильно, а именно, что макет не отображается. Мне нужно копать глубже инспектора макета. –
Я проверил, и у меня есть setRetainInsance, установленный как на фрагменте вкладок, так и на его вложенных дочерних элементах. У меня есть «добавить» функции этой вкладки, и если я использую ее, новый дочерний фрагмент будет создан. Кажется, это проблема, связанная с правильным восстановлением дочерних фрагментов. Необходимо больше копать –