ViewPager2ではデフォルトのoffScreenPageLimitが-1
October 25, 2020
ViewPagerからViewPager2に置き換えた際、ViewPager内の隣のFragmentが事前に読み込まれなくなったため確認したところ、 ViewPager2ではデフォルトの offScreenPageLimit が -1 に設定されているようだった。(ViewPagerのデフォルトは1)
ViewPager
private static final int DEFAULT_OFFSCREEN_PAGES = 1;
ViewPager2
public static final int OFFSCREEN_PAGE_LIMIT_DEFAULT = -1;
ということで、明示的に1をセットすることで、従来のViewPagerのような挙動になる。
viewpager2.offscreenPageLimit = 1
setOffScreenPageLimitのコメントには以下が追加されており、
OFFSCREEN_PAGE_LIMIT_DEFAULT to use RecyclerView’s caching strategy.
と、記載されているようにViewPager2ではRecyclerView.Adapterを利用するようになることから、このような変更がされたのだと思われる。
もともと、ページが少なく固定の場合のパフォーマンス向上を目的としたパラメータなので、デフォルトで行われないのは納得できるが、挙動の違いで若干時間を溶かしてしまったので、マイグレーションガイドなどに細かな差分もあると嬉しいと思った。