質問

3つのフラグメントを表示しているFragmentPageRadapterにフックアップされたビューペーカーがあります。 ViewPagerは、現在の位置から複数のスワイプである場合、ホストされたフラグメントのビューを破壊するように見えます。

これらのビューはすべて簡単なリストであり、この最適化は完全に不要なので、無効にしたいと思います。リストにはレイアウトアニメーションが適用され、それらのアニメーションが破壊されて再現された後にリプレイされているため、視覚的な問題が発生しています。また、毎回Scrollbar Introアニメーション(スクロールバーが一時的に見えるようにスクロールが可能であることを示すことができる)が表示され、ユーザーの現在のスクロール位置はプロセスで失われます。

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

ViewPagerにこの動作を止めて、すべての断片をメモリに保つように説得する方法はありますか?

役に立ちましたか?

解決

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

あなたの場合、2を指定する必要があります。これにより、3番目のページにあるときに最初のページが破壊されず、その逆も同様です。

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

他のヒント

デフォルトでは、ページをスワイプするときにViewPagerがフラグメントを再作成します。これを防ぐために、2つのことのいずれかを試すことができます。

1. フラグメントのoncreate()で、setretaininstance(true)を呼び出します。

2. フラグメントの数が固定され、比較的小さい場合は、oncreate()で次のコードを追加します。

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

私が正しく覚えていれば、2番目のオプションはより有望です。しかし、私はあなたに両方を試して、それらのどれが機能するかを確認することをお勧めします。

「アイドル状態のビュー階層の現在のページの両側に保持するページの数を設定します。この制限を超えるページは、必要に応じてアダプターから再作成されます。」

http://developer.android.com/reference/android/support/v4/view/viewpager.html#setoffscreenpagelimit(int(int)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top