ViewPager がオフスクリーンビューを破壊しないようにする 質問する

ViewPager がオフスクリーンビューを破壊しないようにする 質問する

3 つのフラグメントを表示している FragmentPagerAdapter に ViewPager を接続しています。ViewPager は、現在の位置から 1 回以上スワイプすると、ホストされているフラグメントのビューを破棄するようです。

これらのビューはすべて単純なリストであり、この最適化はまったく不要なので、無効にしたいと思います。リストにはレイアウト アニメーションが適用されており、それらのアニメーションは破棄されて再作成された後に再生されるため、視覚的な問題が発生します。また、毎回スクロール バーのイントロ アニメーション (スクロール可能であることを示すためにスクロール バーが短時間表示される) が表示されるため、気が散る可能性があり、その過程でユーザーの現在のスクロール位置が失われます。

また、最初のスワイプが発生するまで 3 番目のフラグメントは読み込まれません。これは、各フラグメントが独自のサービス呼び出しを処理するため問題があり、アクティビティが読み込まれるときに 3 つすべてが同時に実行されるようにしたいからです。3 番目のサービス呼び出しが遅延されるのは理想的ではありません。

ViewPager にこの動作を停止させ、すべてのフラグメントをメモリ内に保持させる方法はありますか?

ベストアンサー1

改訂4サポート パッケージでは、ViewPager にメソッドが追加され、デフォルトの 1 ではなく、使用するオフスクリーン ページの数を指定できるようになりました。

あなたの場合、2 を指定して、3 ページ目にあるときに最初のページが破棄されないようにし、その逆も同様にします。

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);

おすすめ記事