Android ViewPagerネストViewPager+Fragment問題

2695 ワード

最近プロジェクトの中でまたViewPagerが互いにネストする問題に出会って、コードの実現はとても簡単で、主に現れる可能性のある問題はサブViewPagerのfragmentがスライドして白いスクリーンが現れて、この問題の出現はFragmentManagerの方法の呼び出しの誤りで、androidの中でFragmentManagerに関わる方法は主に:getChildFragmentManager()getFragmentManager()とgetSupportFragmentManager()の3つの方法の違いを説明します
1.getChildFragmentManager()メソッドの公式ドキュメントの説明は次のとおりです.
Return a private FragmentManager for placing and managing Fragments 
inside of this Fragment.

FragmentManagerが現在のFragment内部のFragmentを管理および設定するために、たとえば前述したように、外層ViewPager(親ViewPager)のFragment(親Fragment)ネストされた内層ViewPager(子ViewPager)+内層Fragment(子Fragment)を返し、子FragmentのFragmentManagerの取得方法はgetChildFragmentManager()メソッドを呼び出す必要があります.
2.getFragmentManager()メソッド
公式説明は以下の通り
Return the FragmentManager for interacting with fragments associated
with this fragment's activity.

FragmentManagerは、現在のActivity内部のFragmentと対話するために返されます.3.0以降にFragmentコントロールがあるため、親コントロールがActivityの場合、3.0以降のシステムに適用されます.
3.getSupportFragmentManager()メソッド
公式説明は以下の通り
Return the FragmentManager for interacting with fragments associated
with this activity.

メソッド紹介はgetFragmentManager()メソッドと同じで、FragmentActivity内にあるのとは異なります.Fragmentは3.0以降のコンポーネントなので、これまでのシステムバージョンでもFragmentを使用できるように、V 4パッケージのgetSupportFragmentManager()メソッドを使用してFragmentManagerオブジェクトを間接的に取得します.
メソッドのまとめでは、Activity/FragmentActivityに属するFragmentを管理するにはgetFragmentManager()/getSupportFragmentManager()を使用し、FragmentにFragmentを追加するにはgetChildFragmetManager()を使用して管理する必要があります.
4.ViewPager Adapterについての説明ViewPagerを呼び出すAdapter継承可能なクラスにはPagerAdapter、FragmentPagerAdapter、FragmentStatePager Adapterがあり、後の2つはPagerAdapterのサブクラスである.FragmentPagerAdapterはPagerAdapterから継承されます.このクラスは、共通のPagerAdapterよりも、各ページがFragmentの場合に集中しています.ドキュメントに記載されているように、クラス内の生成された各Fragmentはメモリに保存されるので、比較的静的なページに適用され、数も少ないものに適用されます.多くのページを処理する必要があり、データのダイナミック性が高く、メモリの消費量が多い場合は、FragmentStatePagerAdapterを使用します.FragmentStatePagerAdapterは、前のFragmentPagerAdapterと同様に、継承子PagerAdapterです.しかし、FragmentPagerAdapterとは異なり、そのクラス名の「State」が示す意味のように、このPagerAdapterの実装は現在のページのみを保持し、ページが視線から離れると消去され、リソースが解放される.ページを表示する必要がある場合は、ListViewの実装と同様に、新しいページを生成します.このように実現される利点は、ページが大量にある場合、メモリに大量のメモリを消費する必要がないことです.