0

Ich habe eine FragmentActivity, die 3 Fragmente in einem View Pager lädt. Bei jeder Neuinstallation wird das zweite Fragment geladen, aber bald nachdem es schwarz wird. Danach wird das zweite Fragment neu geladen und funktioniert auch dann, wenn Sie durch die Ansichten wischen. So wird es nur beim ersten Mal schwarz. Ich habe dies mit einem FragmentPagerAdapter und FragmentStatePagerAdapter implementiert, aber es verhält sich genauso. Dies geschieht nur für KitKat und Lollipop. Alle Fragmente haben einfache Layouts, keine verschachtelten Fragmente.Schwarzes Fragment beim ersten Laden in 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); 
    } 

Adapter:

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(); 
      } 
    } 

Antwort

1

Das Problem war das dritte Fragment die eine SurfaceView instanziiert. Es scheint, dass ViewPager standardmäßig Ansichten zerstört und erstellt, die sich außerhalb des Bildschirms befinden. Also, um diese zu blockieren habe ich in meinem FragmentActivity

viewPager.setOffscreenPageLimit(listFragments.size()); 

Damit die Anzahl der undestroyable Ansichten angegeben ist. Vor dem Hinzufügen war die Anzahl der Kinder, die der ViewPager hatte, immer kleiner mit einer Seite und jetzt verstehe ich, warum die SurfaceView immer zerstört wurde, weil sie nicht auf dem Bildschirm war. Endlich kein schwarzer Bildschirm mehr/kein Flackern mehr.

+0

Das funktioniert nur, wenn Sie nicht versuchen, SetCurrentItem zu tun. Ich versuche, dies zu verwenden und habe auch Position 1 beim Start angezeigt. –

0

Hope this Ihre Situation helfen könnte: Sie können versuchen, die folgende Änderung Sie die Ansicht Pager Adapter instanziiert auf den Weg zu machen:

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

hier ein Dokumentationslink: documentation nested fragments

+1

Danke, aber die Fragmente werden zu einer FragmentActivity hinzugefügt und nicht zu einem anderen Fragment. Es gibt keine verschachtelten Fragmente. – blavi

+0

Haben Sie versucht, die Methode getItemPosition() im PagerAdapter zu überschreiben und POSITION_NONE zurückgeben? (nur um zu sehen, was passiert). Rufen Sie in diesem Fall auch pagerAdapterWelcome.notifyDataSetChanged() in der onCreate-Methode von IntroActivity auf. –

+0

Entschuldigung für die Verzögerung. Ich überholte getItemPosition(), um POSITION_NONE zurückzugeben, und rief pagerAdapterWelcome.notifyDataSetChanged() auf und verhält sich immer noch gleich. Ich habe mehr Tests gemacht und auf Lollipop flackert der zweite Bildschirm, die schwarze Bildschirmzeit ist kürzer. Bei Marshmallow ist dies jedoch nicht der Fall. – blavi

Verwandte Themen