ntsk

ViewPager2ではデフォルトのoffScreenPageLimitが-1

October 25, 2020

ViewPagerからViewPager2に置き換えた際、ViewPager内の隣のFragmentが事前に読み込まれなくなったため確認したところ、 ViewPager2ではデフォルトの offScreenPageLimit が -1 に設定されているようだった。(ViewPagerのデフォルトは1)

ViewPager

https://github.com/androidx/androidx/blob/androidx-master-dev/viewpager/viewpager/src/main/java/androidx/viewpager/widget/ViewPager.java#L112

private static final int DEFAULT_OFFSCREEN_PAGES = 1;

ViewPager2

https://github.com/androidx/androidx/blob/androidx-master-dev/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java#L120

public static final int OFFSCREEN_PAGE_LIMIT_DEFAULT = -1;

ということで、明示的に1をセットすることで、従来のViewPagerのような挙動になる。

viewpager2.offscreenPageLimit = 1

setOffScreenPageLimitのコメントには以下が追加されており、

OFFSCREENPAGELIMIT_DEFAULT to use RecyclerView’s caching strategy.

と、記載されているようにViewPager2ではRecyclerView.Adapterを利用するようになることから、このような変更がされたのだと思われる。

もともと、ページが少なく固定の場合のパフォーマンス向上を目的としたパラメータなので、デフォルトで行われないのは納得できるが、挙動の違いで若干時間を溶かしてしまったので、マイグレーションガイドなどに細かな差分もあると嬉しいと思った。

Android Developers / Migrate from ViewPager to ViewPager2


© 2020 ntsk, All Rights Reserved.