Разница между FragmentPagerAdapter с ViewPager с OffScreenLimit, установленным на 1, и FragmentStatePagerAdapter?

В чем разница между FragmentPagerAdapter с ViewPager с OffScreenLimit, установленным на 1, и FragmentStatePagerAdapter?

О FragmentPagerAdapter в руководстве Google говорится:

Эта версия пейджера лучше всего подходит для использования, когда есть несколько обычно более статических фрагментов, которые нужно просмотреть, например, набор вкладок. Фрагмент каждой страницы, которую посещает пользователь, будет храниться в памяти, хотя его иерархия представления может быть разрушена, если она не видна. Это может привести к использованию значительного объема памяти, поскольку экземпляры фрагментов могут удерживать произвольное количество состояний. Для больших наборов страниц рассмотрите вариант FragmentStatePagerAdapter.

И по поводу FragmentStatePagerAdapter:

Эта версия пейджера более полезна, когда имеется большое количество страниц, работая больше как представление списка. Когда страницы не видны пользователю, весь их фрагмент может быть уничтожен, сохранив только сохраненное состояние этого фрагмента. Это позволяет пейджеру удерживать гораздо меньше памяти, связанной с каждой посещенной страницей, по сравнению с FragmentPagerAdapter за счет потенциально больших накладных расходов при переключении между страницами.

Я думаю, что если я установлю offscreenlimit на 1, он уничтожит все фрагменты за пределами двух следующих за текущим фрагментом, и он будет вести себя аналогично FragmentStatePagerAdapter. Это правильно?


person dowjones123    schedule 14.05.2015    source источник
comment
Возможный дубликат Разница между FragmentPagerAdapter и FragmentStatePagerAdapter   -  person Prince    schedule 24.06.2017


Ответы (1)


Разница именно в том, что написано в документах. Но это может немного сбивать с толку.

FragmentPagerAdapter держит свои фрагменты в FragmentManager в отсоединенном состоянии, пока они не видны (пока они выходят за границы вне экрана), а FragmentStatePagerAdapter удаляет их из FragmentManager.

offscreenPageLimit немного отличается. Все фрагменты внутри него остаются привязанными к пользовательскому интерфейсу. После перехода они либо удаляются или отсоединен.

Вы можете увидеть это в источниках FragmentPagerAdapter (строка 121) и FragmentStatePagerAdapter (строка 144)

person simekadam    schedule 14.05.2015