ViewPagerのキャッシュする画面数を変更する

ViewPagerの生成時に複数のページを生成してキャッシュしておきたい。

解決

// 2ページ生成
mViewPager.setOffScreenPageLimit(2);

説明

一般的に OffScreen とは、生成されていて描画されていない画面のことを指すが、ViewPager では生成されていないページのことを OffScreen と呼ぶ。

デフォルトは 1 が設定される

http://tools.oesf.biz/android-4.2.0_r1.0/xref/frameworks/support/v4/java/android/support/v4/view/ViewPager.java#DEFAULT_OFFSCREEN_PAGES

private static final int DEFAULT_OFFSCREEN_PAGES = 1;

setOffScreenPageLimit(1) を設定すると

1ページ目が描画されている時は、2ページ目が生成されているが、3ページ目以降は生成されない。2ページ目に移動後、3ページ目に移動しようとしてドラッグすると3ページ目が直ちに生成されるが、3ページ目が非同期にロードする等、重たい時は処理が間に合わない場合がある。

f:id:incesticide:20140510203527p:plain

setOffScreenPageLimit(2) を設定すると

1ページ目が描画されている時は、2ページ目と3ページ目が生成される。2ページ目から3ページ目に移動する時に、新たにビューが生成されることがないため、動作がスムーズになる。ただし、それだけメモリを消費することになるので、動作環境によってはメモリ不足になる可能性に注意すること。

f:id:incesticide:20140510230707p:plain

関連記事

ViewPager.SimpleOnPageChangeListener についてまとめた記事。

ViewPager.PageTransformer についてまとめた記事。