android - 如何在 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;
}
}
解决方案
如果您无法访问片段之外的播放器对象,则可以尝试此方法。
当前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())
并暂停为假。但是可能需要定期使用处理程序进行此检查。
检查这是否有任何帮助。
推荐阅读
- apache-spark - 将 sql 查询转换为等效的 spark 查询
- python - 使用“嵌套”创建一个脚本,首先打印列表中的单词,然后打印每个字母
- python - 在 PyQT 中单击按钮后的 Msg_box
- android - 无法在 OnCreate 中将视图添加到 LinearLayout
- in-app-purchase - 当我使用真实的产品 ID 测试我的应用时,我只能使用测试卡付款
- excel - Application.ScreenUpdating 上的运行时错误
- timescaledb - Timescaledb 更新致命:扩展“timescaledb”版本不匹配:共享库版本 1.6.1;SQL 版本 1.4.2
- javascript - Chrome webRequest onBeforeRequest 在收到函数返回后不会重定向
- java - Java 没有为第一个变量接受用户输入
- codeigniter-4 - Codeigniter 4 Query Builder 在再次执行时丢失 SELECT 和 WHERE 条件