Android 在ViewPager中为videoView使用setUserVisibleHint
我已经完成了视频播放器的制作,它可以从url播放视频。唯一的问题是我使用的是ViewPager,其中有不同的页面,其中一个也是。因此,如果我不使用setUserVisibleHint()会出现两个问题,它们是:Android 在ViewPager中为videoView使用setUserVisibleHint,android,android-fragments,video,android-viewpager,Android,Android Fragments,Video,Android Viewpager,我已经完成了视频播放器的制作,它可以从url播放视频。唯一的问题是我使用的是ViewPager,其中有不同的页面,其中一个也是。因此,如果我不使用setUserVisibleHint()会出现两个问题,它们是: 直到我切换到第三页,视频才停止播放 如果媒体控制器可见,并且如果切换到下一页,则媒体控制器在网络页面中也可见,直到它消失 现在我的代码是: public class HomeFragment extends Fragment { private VideoView mVideoVi
- 直到我切换到第三页,视频才停止播放
- 如果媒体控制器可见,并且如果切换到下一页,则媒体控制器在网络页面中也可见,直到它消失
public class HomeFragment extends Fragment {
private VideoView mVideoView;
private ProgressBar mProgress;
private MediaController mMediaController;
private String url = null;
private Uri uri = null;
public HomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
url = "xyz";
uri = Uri.parse(url);
mVideoView = (VideoView) view.findViewById(R.id.homeVideoView);
mVideoView.setBackgroundColor(Color.TRANSPARENT);
mProgress = (ProgressBar) view.findViewById(R.id.homeSpinner);
mProgress.setVisibility(View.VISIBLE);
mMediaController = new MediaController(getContext());
getActivity().getWindow().setFormat(PixelFormat.TRANSLUCENT);
loadVideos();
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
//loading cart elements
}else{
Log.e("NOT", "VISIBLE");
}
}
//load the videos in the home fragment
private void loadVideos() {
try {
mVideoView.setMediaController(mMediaController);
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(final MediaPlayer mp) {
mp.start();
//handling the progressBar for buffering and ending it
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mediaPlayer, int i, int i1) {
if(MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START == i){
mProgress.setVisibility(View.GONE);
mp.start();
}
if (MediaPlayer.MEDIA_INFO_BUFFERING_START == i){
mProgress.setVisibility(View.VISIBLE);
}
if(MediaPlayer.MEDIA_INFO_BUFFERING_END == i){
mProgress.setVisibility(View.GONE);
}
return false;
}
});
}
});
} catch (Exception e) {
Log.e("VIDEO PLAYER ERROR", e.getMessage());
}
}
}
我试过的是:
- 在isVisibleToUser案例中声明loadVideo(),但出现以下问题: 视频播放器异常:无法将MedialController设置为空对象引用,并无限加载progressBar
- 删除了loadVideos()中的所有内容,并让setOnPReparedListener()出现在那里,但这也给了我一个例外
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.VideoView.setOnPreparedListener(android.media.MediaPlayer$OnPreparedListener)
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
//loading cart elements
mVideoView.start();
}else{
Log.e("NOT", "VISIBLE");
mVideoView.stopPalyBack();
}
}