首页 > 解决方案 > 如何在 viewpager 中暂停视频播放器

问题描述

我有 3 个页面的 viewPager,在其中一个页面中我有视频播放器。我面临一个问题,我的视频播放器一直在所有页面上工作。如何暂停视频播放器将更改页面?

适配器:

public class HomeTabsAdapter extends FragmentStatePagerAdapter {

    MainActivity activity;


    public HomeTabsAdapter(MainActivity activity, FragmentManager fm){
        super(fm);
        this.activity = activity;
    }


    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                return VideoTrendsFragment.newInstance();
            case 1:
                return MomytFragment.newInstance();
            case 2:
                return StoryFragment.newInstance();
                default:
                    return MomytFragment.newInstance();
        }
    }

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

标签: androidandroid-viewpager

解决方案


如果您无法访问片段之外的播放器对象,则可以尝试此方法。

当前HomeTabsAdapter扩展FragmentStatePagerAdapter您拥有的构造函数已被弃用。

因此,我鼓励您将构造函数切换到如下所示的构造函数:

//Not sure why you need to have activity in you constructor but since currently does
public HomeTabsAdapter(@NonNull FragmentManager fm, int behavior, MainActivity activity) {
    super(fm, behavior);
    this.activity = activity;
}

因此,您还必须将活动中的适配器启动更改为:

adapter = new HomeTabsAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

如果您使用上述行为标志,则当页面更改时,onPause将为该片段调用该方法,并在返回到该片段onResume时调用该片段。

因此,您需要在片段中覆盖这些方法,例如:

@Override
public void onPause() {
    super.onPause();
    if(mPlayer.isPlaying())
          mPlayer.pause();
}

如果您不希望删除已弃用的构造函数,我没有完美的解决方案,但您可以检查尝试检查页面是否可见if(getUserVisibleHint())并暂停为假。但是可能需要定期使用处理程序进行此检查。

检查这是否有任何帮助。


推荐阅读