Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用viewpager一次创建一个片段_Android_Android Fragments_Android Viewpager_Fragment_Adapter - Fatal编程技术网

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

Android 如何使用viewpager一次创建一个片段,android,android-fragments,android-viewpager,fragment,adapter,Android,Android Fragments,Android Viewpager,Fragment,Adapter,我在viewpager中使用了两个片段。在第二个片段中,我使用exoplayer从url播放了一个视频。我的问题是,当活动启动时,视频会自动加载,因为所有片段都是由viewpager自动创建的。如何一次创建一个帧,以便第二个片段仅在用户可见时才能播放视频(通过切换或点击选项卡) viewpager适配器 class ViewPagerAdapter extends FragmentStatePagerAdapter { Bundle bundle; public ViewPag

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

请提供帮助。

您不需要一次创建一个片段: 在第二个片段中使用以下代码,在用户打开该片段时运行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);

您不需要一次创建一个片段: 在第二个片段中使用以下代码,在用户打开该片段时运行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。您的解决方案很有效。非常感谢@divyesh patel。你的解决方案很有效。