1. ホーム
  2. android

[解決済み] ViewPager が画面外のビューを破壊しないようにする。

2022-06-14 19:40:40

質問

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

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

また、最初のスワイプが起こるまで 3 番目のフラグメントをロードしません。これは、各フラグメントが独自のサービス呼び出しを処理し、アクティビティがロードされたときに 3 つすべてを同時に起動させることを好むので、問題があります。3 つ目のサービス呼び出しが遅れるのは、理想的ではありません。

この動作を停止し、メモリ内のすべてのフラグメントを維持するようにViewPagerを説得する方法はありますか?

どのように解決するのですか?

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

あなたのケースでは、3 ページ目にいるときに最初のページが破壊されないように、2 を指定したいのです。

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