0

私はビューページャーで3つのフラグメントを読み込むFragmentActivityを持っています。新しくインストールされるたびに、2番目のフラグメントがロードされますが、すぐに黒になります。この後、2番目のフラグメントがリロードされ、ビューをスワイプしている間も正常に機能します。それで、最初にロードされたときだけ黒くなります。私はこれをFragmentPagerAdapterとFragmentStatePagerAdapterを使って実装しましたが、同じ動作をします。これは、KitKatとLollipopでのみ発生します。すべてのフラグメントは単純なレイアウトで、ネストされたフラグメントはありません。ここViewPagerで最初に読み込まれたときの黒いフラグメント

//initializing PagerAdapter 
pagerAdapterWelcome = new PagerAdapter(getChildFragmentManager(), listFragments); 

public class IntroActivity extends FragmentActivity { 
     private List<Fragment> listFragments; 
     private PagerAdapter pagerAdapterWelcome; 
     private OnboardingPager viewPager; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.intro_pager); 
      viewPager = (OnboardingPager) findViewById(R.id.viewPager); 
      //Initializing the List 
      listFragments = new ArrayList<Fragment>(); 
      //initializing the fragments 
      WelcomeFragment welcomeFragment = new WelcomeFragment(); 
      TicketScanFragment ticketOptionScanFragment = new TicketScanFragment(); 
      ScannerFragment scanFragment = new ScannerFragment(); 

      //Adding Fragments to List 
      listFragments.add(welcomeFragment); 
      listFragments.add(ticketOptionScanFragment); 
      listFragments.add(scanFragment); 

      //initializing PagerAdapter 
      pagerAdapterWelcome = new PagerAdapter(getSupportFragmentManager(), listFragments); 
      viewPager.setAdapter(pagerAdapterWelcome); 

      final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots); 
      tabLayout.setupWithViewPager(viewPager, true); 
    } 

アダプタ:

public class PagerAdapter extends FragmentStatePagerAdapter { 

      private List<Fragment> listFragments; 


      public PagerAdapter(FragmentManager fm, List<Fragment> listFragments) { 
       super(fm); 
       this.listFragments = listFragments; 
      } 

      @Override 
      public Fragment getItem(int i) { 
       return listFragments.get(i); 
      } 

      @Override 
      public int getCount() { 
       return listFragments.size(); 
      } 
    } 

答えて

1

問題は3番目の断片SurfaceViewをインスタンス化しました。デフォルトでViewPagerは画面外にあるビューを破棄して作成するようです。だからこれをブロックするために、私は私のFragmentActivityに追加しました

viewPager.setOffscreenPageLimit(listFragments.size()); 

これは、無意味なビューの数が指定されています。これを追加する前に、ViewPagerの子どもの数は常に1ページで小さくなりました。なぜなら、SurfaceViewは画面外のため常に破棄されていたのです。最後に、黒い画面/ちらつきがなくなりました。

+0

これは、setCurrentItemを実行しようとしていない場合にのみ機能します。私はこれを使用しようとしており、起動時に位置1を表示するようにしています。 –

0

・ホープこれはあなたの状況を助けることができる:あなたは、ビューページャアダプタをインスタンス化する方法に以下の変更をしようとすることができますドキュメントのリンク:documentation nested fragments

+1

ありがとうございますが、フラグメントはFragmentActivityに追加され、別のフラグメントには追加されません。ネストされたフラグメントはありません。 – blavi

+0

PagerAdapter内でgetItemPosition()メソッドをオーバーライドして、POSITION_NONEを返すようにしましたか? (ちょうど何が起こるか見るために)。この場合も、IntroActivityのonCreateメソッド内でpagerAdapterWelcome.notifyDataSetChanged()を呼び出してください。 –

+0

遅れて申し訳ありません。私はPOSITION_NONEを返すためにgetItemPosition()をオーバーライドし、またpagerAdapterWelcome.notifyDataSetChanged()を呼び出して同じように動作します。私はより多くのテストを行い、ロリポップで2番目の画面がちらつき、黒い画面の時間が短くなります。しかし、これはまったくマシュマロでは起こりません。 – blavi

関連する問題