如何使用viewpager一次创建一个片段

问题描述:

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

请帮助里面。

你并不需要在同一时间创建片段之一: 使用此代码在第二个片段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