2017-02-03 12 views
0

У меня есть FragmentActivity, который загружает 3 фрагмента в представлении пейджера. При каждой новой установке второй фрагмент загружается, но вскоре после него становится черным. После этого второй фрагмент перезагружается и работает нормально даже при просмотре представлений. Таким образом, он становится черным только в первый раз, когда он загружен. Я реализовал это с помощью FragmentPagerAdapter и FragmentStatePagerAdapter, но он ведет себя одинаково. Это происходит только для KitKat и Lollipop. Все фрагменты имеют простые макеты, без вложенных фрагментов.Черный фрагмент при загрузке в первый раз в ViewPager

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

Проблема была в третьем фрагменте который создал экземпляр SurfaceView. Похоже, что ViewPager по умолчанию уничтожает и создает представления, выходящие за пределы экрана. Поэтому для того, чтобы блокировать это я добавил в моем FragmentActivity

viewPager.setOffscreenPageLimit(listFragments.size()); 

При этом указывается количество неуничтожимых просмотров. Прежде чем добавлять это число детей, ViewPager всегда было меньше на одной странице, и теперь я понимаю, почему SurfaceView всегда был уничтожен, потому что он вышел из экрана. Наконец, больше нет черного экрана/мерцания.

+0

Это работает только в том случае, если вы не пытаетесь выполнить setCurrentItem. Я пытаюсь использовать это, а также показывать позицию 1 при запуске. –

0

Надеется, что это может помочь вашей ситуации: вы можете попробовать сделать следующее изменение в том, как вы создать экземпляр адаптера вида пейджера:

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

здесь документация ссылка: documentation nested fragments

+1

Спасибо, но фрагменты добавлены в FragmentActivity, а не в другой фрагмент. Вложенных фрагментов нет. – blavi

+0

Вы пытались переопределить метод getItemPosition() внутри PagerAdapter и вернуть его POSITION_NONE? (просто чтобы узнать, что произойдет). Также в этом случае вызовите pagerAdapterWelcome.notifyDataSetChanged() внутри метода onCreate IntroActivity –

+0

Извините за задержку. Я переопределил getItemPosition(), чтобы вернуть POSITION_NONE, а также вызвал pagerAdapterWelcome.notifyDataSetChanged() и по-прежнему ведет себя одинаково. Я сделал больше тестов, а на Lollipop второй экран мерцает, время черного экрана короче. Однако это не происходит вовсе на Зефире. – blavi

 Смежные вопросы

  • Нет связанных вопросов^_^