【问题标题】:How to create one fragment at a time using viewpager如何使用 viewpager 一次创建一个片段
【发布时间】:2017-10-13 12:43:45
【问题描述】:

我在 viewpager 中使用了两个片段。在第二个片段中,我使用 exoplayer 从 url 播放视频。我的问题是,当活动启动时,视频会自动加载,因为所有片段都是由 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);

请帮忙。

【问题讨论】:

    标签: android android-fragments android-viewpager fragment adapter


    【解决方案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;
                    }
                }
            }
    

    还有一件事,你必须在创建 viewpager 之后添加这一行: 在你的情况下

    tabLayout.setupWithViewPager(viewPager);
    
    viewPager.setOffscreenPageLimit(1);
    

    【讨论】:

    • 非常感谢@divyesh-patel。您的解决方案运行良好。
    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多