我有一个包含不同片段的viewpager,其中一个片段中有视频片段。如果我在播放视频时切换页面,那么即使我在不同的页面上也会重新播放。我尝试为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总是为空,即使它在后台播放也是如此。这个视频视图是在片段的OnCreateView方法上创建的,但是在片段被销毁之前它不应该保持设置为我的mVideoView字段吗?
答案 0 :(得分:10)
我通过覆盖方法解决了这个问题:
void setUserVisibleHint(boolean isVisibleToUser)
不知道这是否正确。
答案 1 :(得分:5)
你必须在你播放视频的片段中覆盖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
}
}
}
答案 2 :(得分:2)
您的mAdapter.getItem很可能每次都在创建一个新片段。这将导致视频视图始终为空。
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;
}
}