0

Ich verwende zwei Fragmente in Viewpager. Im zweiten Fragment spiele ich ein Video von der URL mit dem Exoplayer. Mein Problem ist, dass beim Start der Aktivität das Video automatisch geladen wird, da alle Fragmente automatisch vom viewpager erstellt werden. So erstellen Sie jeweils ein Fragment, so dass das zweite Fragment das Video nur wiedergeben kann, wenn es für den Benutzer sichtbar ist (indem Sie auf den Tab tippen oder mit dem Finger darauf tippen).So erstellen Sie ein Fragment zu einer Zeit mit Viewpager

Der viewpager Adapter

class ViewPagerAdapter extends FragmentStatePagerAdapter { 
    Bundle bundle; 

    public ViewPagerAdapter(FragmentManager manager, Bundle bundle) { 
     super(manager); 
     this.bundle = bundle; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Log.d("getItem", position + ""); 
     switch (position) { 
      case 0: 
       IngredientListFragment ingredientListFragment = new IngredientListFragment(); 
       ingredientListFragment.setArguments(bundle); 
       return ingredientListFragment; 
      case 1: 
       StepsListFragment stepsListFragment = new StepsListFragment(); 
       stepsListFragment.setArguments(bundle); 
       return stepsListFragment; 
      default: 
       IngredientListFragment ing = new IngredientListFragment(); 
       ing.setArguments(bundle); 
       return ing; 
     } 
    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 


    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Ingredients"; 
      case 1: 
       return "Steps"; 
      default: 
       return "Ingredients"; 
     } 
    } 
} 

Innerhalb der Aktivität

final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 

       TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 

       ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), bundle); 

       viewPager.setAdapter(adapter); 

       tabLayout.setupWithViewPager(viewPager); 

Bitte um Hilfe.

Antwort

1

Sie müssen nicht Fragment einer nach dem anderen erstellen: Verwendung dieser Code in der zweiten Fragment exoplayer ausgeführt werden, wenn Benutzer dieses Fragment öffnen:

private boolean _hasLoadedOnce = false; // your boolean field 

     @Override 
     public void setUserVisibleHint(boolean isFragmentVisible_) { 
      super.setUserVisibleHint(true); 

      if (this.isVisible()) { 
       if (isFragmentVisible_ && !_hasLoadedOnce) { 

        // move exoplayer code here so this code run only when user select this fragment 

        _hasLoadedOnce = true; 
       } 
      } 
     } 

Eine weitere Sache, müssen Sie diese Zeile setzen, nachdem creating viewpager: in Ihrem Fall nach

tabLayout.setupWithViewPager(viewPager); 

viewPager.setOffscreenPageLimit(1); 
+0

Vielen Dank @ Divyesh-Patel. Ihre Lösung funktioniert gut. – scalp007

Verwandte Themen