Viewpager上的VideoView,切换页面时停止video

我有一个viewpager与不同的片段,其中一个有一个videoview在其中。 如果我在播放video的时候切换页面,那么即使我在不​​同的页面上,它也会重新播放。 我试着像这样实现ViewPager的OnPageChangeListener:

viewpager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { if(position!=mAdapter.getCount()-1){ MultimediaFragment frag = (MultimediaFragment)mAdapter.getItem(position+1); frag.onPageIsChanged(); } if(position != 0){ MultimediaFragment frag = (MultimediaFragment)mAdapter.getItem(position-1); frag.onPageIsChanged(); } } 

与onPageIsChanged()是我自己的方法,试图告诉我的videoview属性停止和隐藏控制:

 public void onPageIsChanged() { if(mVideoView!=null){ if(mVideoView.isPlaying()){ mVideoView.stopPlayback(); } mMedia.hide(); } } 

问题是mVideoView总是空的,即使它在后台播放。 这个video是在片段的OnCreateView方法上创build的,但是不应该保持设置为我的mVideoView字段,直到片段被销毁?

Solutions Collecting From Web of "Viewpager上的VideoView,切换页面时停止video"

我通过覆盖方法解决了这个问题:

 void setUserVisibleHint(boolean isVisibleToUser) 

不知道这是否是正确的方式。

你必须在播放video的片段中覆盖setUserVisibleHint方法。

  public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (this.isVisible()) { if (!isVisibleToUser) // If we are becoming invisible, then... { //pause or stop video } if (isVisibleToUser) // If we are becoming visible, then... { //play your video } } } 

很可能你的mAdapter.getItem每次都创build一个新的片段。 这将导致video视图始终为空。

 public class MyAdapter extends FragmentStatePagerAdapter { SparseArray<Fragment>fragments = new SparseArray<Fragment>(); public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return contents.size(); } @Override public Fragment getItem(int position) { Fragment frag = fragments.get(position); Bundle args = new Bundle(); if(frag != null){ return frag; } fragments.put(position, frag); return frag; } }