0

뷰 페이저에 3 개의 조각을로드하는 FragmentActivity가 있습니다. 새로 설치 할 때마다 두 번째 조각이로드되지만 곧 검정으로 바뀝니다. 이 후 두 번째 조각이 다시로드되고보기를 스 와이프하는 중에도 제대로 작동합니다. 따라서 처음으로로드 될 때만 검은 색으로 변합니다. 나는 이것을 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에 추가되고 다른 Fragment에는 추가되지 않습니다. 중첩 된 조각이 없습니다. – blavi

+0

PagerAdapter 내에서 getItemPosition() 메서드를 재정의하고 POSITION_NONE을 반환하려고 했습니까? (단지 무슨 일이 일어나는 지보기 위해서). 이 경우에도 IntroActivity –

+0

의 onCreate 메소드 내부에서 pagerAdapterWelcome.notifyDataSetChanged()를 호출하면 지연 될 수 있습니다. getItemPosition()을 재정 의하여 POSITION_NONE을 반환하고 pagerAdapterWelcome.notifyDataSetChanged()라고도하며 여전히 동일하게 동작합니다. 나는 더 많은 테스트를했고 롤리팝에서 두 번째 화면이 깜박이고 검은 화면이 더 짧아졌습니다. 그러나 이것은 마시멜로에서 전혀 일어나지 않습니다. – blavi