Intereting Posts
Как нарисовать bitmapfont на сцене в libgdx? Как разместить кнопку внутри текста редактирования Как получить количество строк в тексте перед рендерингом? Наиболее эффективный способ преобразования одного символа в CharSequence LinearLayout не заполняет scrollview Log <GATE-M> DEV_ACTION_COMPLETED </ GATE-M>, похоже, задерживает выполнение на Android Элементы меню не отображаются на панели действий Ошибка раздувания класса android.support.v7.widget.RecyclerView Как использовать SearchView из темной темы в теме Light Appcompat Добавить представление в уже существующую группу просмотра xml в коде Как вы можете обнаружить двухъядерный процессор на Android-устройстве из кода? Получить изображение из галереи, чтобы установить изображение в фрагменте? Как вызвать приложение электронной почты на платформе Android Могу ли я масштабировать эмулятор genymotion до «устройства реального размера»? Спам Google Analytics для мобильных устройств – приложение не выпущено

Фрагменты в ViewPager воссоздаются

У меня есть FragmentActivity с контейнером, где я ViewPager Fragment с ViewPager . В ViewPager меня есть 3 Fragment :

 [MainActivity] [ViewPagerFragment] [Fragment1][Fragment2][Fragment3] 

Когда пользователь нажимает кнопку на Fragment1 / Fragment2 / Fragment3 , я заменяю ViewPagerFragment на OtherFragment , поэтому иерархия выглядит следующим образом:

 [MainActivity] [OtherFragment] 

Когда я нажимаю кнопку « Назад» , ViewPagerFragment воссоздается, а также его вложенный Fragment s ( Fragment1 / Fragment2 / Fragment3 ).

Есть ли способ сохранить состояние ViewPagerFragment и его вложенных фрагментов? Чтобы фрагменты сохраняли свое состояние и не воссоздавались?

Я установил setRetainInstance(true) для ViewPagerFragment , но похоже, что он не вступает в силу.

Solutions Collecting From Web of "Фрагменты в ViewPager воссоздаются"

Просто установите это: – где аргумент – количество фрагментов в ViewPager

mViewPager.setOffscreenPageLimit (3);

ViewPager довольно ревностно останавливает то, что в настоящее время не использует, и это именно то, что здесь происходит. Поведение по умолчанию заключается в том, что ViewPager «поддерживает» одну страницу с каждой стороны просматриваемой страницы и уничтожает остальные. Следовательно, в вашем трехстраничном представлении страница 3 уничтожается при выборе страницы 1, а затем, когда страница 2 повторно выбирается, страница 3 воссоздается. Как вы заметили, страница 2 только имеет onCreate (..), вызванную один раз, потому что она всегда смежна или находится в текущей выбранной странице.

Чтобы решить эту проблему, просто установите ViewPager.setOffscreenPageLimit (2). Затем ViewPager будет хранить все ваши фрагменты. Очевидно, это не очень хорошая идея для большого количества фрагментов, но для вашего дела это должно быть хорошо.