0

我在viewpager中使用了兩個片段。在第二個片段中,我使用exoplayer從url播放視頻。我的問題是,當活動啓動時,視頻會自動加載,因爲所有片段都是由viewpager自動創建的。如何一次創建一個分區,以便第二個分段只有在用戶可見時才能播放視頻(通過清除或點擊選項卡)。如何使用viewpager一次創建一個片段

的viewpager適配器

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"; 
     } 
    } 
} 

活動

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

請幫助裏面。

回答

1

你並不需要在同一時間創建片段之一: 使用此代碼在第二個片段exoplayer運行時,用戶打開該片段:

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

還有一件事,你必須把此行之後在您的情況下創建視圖:

tabLayout.setupWithViewPager(viewPager); 

viewPager.setOffscreenPageLimit(1); 
+0

非常感謝@ divyesh-patel。你的解決方案很好。 – scalp007