使用FullscreenVideoView在RecyclerView播放视频遇setMediaController方法找不到错误求助
解决FullscreenVideoView无法调用setMediaController的问题
嘿,我看到你遇到的问题了——FullscreenVideoView找不到setMediaController()方法对吧?这是因为这个自定义视频视图库并没有实现原生VideoView的setMediaController接口,原生VideoView自带这个方法,但FullscreenVideoView专注于全屏播放的特性,没有集成这个功能,所以直接调用就会报错。
快速修复步骤
首先,你需要移除代码中调用setMediaController的相关代码,因为这个方法在FullscreenVideoView里根本不存在:
- 删掉类开头声明的无用成员变量:
private MediaController mediaController;
- 去掉构造函数里的
MediaController初始化代码:
mediaController=new MediaController(context);
- 在
onBindViewHolder方法中,删掉这行调用:
holder.videoview.setMediaController(mediaController);
如果你需要播放控制栏怎么办?
如果你的需求必须要有播放/暂停、进度控制这些功能,有两个可选方案:
自定义控制布局
你可以自己创建一个包含播放按钮、进度条的布局,然后通过FullscreenVideoView获取内部的MediaPlayer实例,监听它的播放状态,手动绑定控制逻辑。比如:holder.videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 绑定自定义播放按钮的点击事件 yourPlayButton.setOnClickListener(v -> { if(mp.isPlaying()){ mp.pause(); } else { mp.start(); } }); holder.videoview.start(); } });换用支持MediaController的视频库
如果你不想自己写控制逻辑,可以考虑换用其他集成了MediaController的视频库,或者直接使用原生VideoView,自己实现全屏逻辑(比如监听屏幕旋转、调整布局参数)。
修改后的核心代码片段
这里是调整后的关键部分代码:
public class Accident extends RecyclerView.Adapter<Accident.ViewHolder> { private Context context; private List<ImageUploadInfo> videoUploadInfoList; public Accident(Context context, List<ImageUploadInfo> mainVideoUploadInfoList) { this.context = context; this.videoUploadInfoList = mainVideoUploadInfoList; } @Override public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { try { ImageUploadInfo video=videoUploadInfoList.get(position); holder.imageNameTextView.setText(video.getImageDescription()); holder.TimeDate.setText(video.getTimeDate()); holder.videoview.setVideoURI(Uri.parse(video.getImageURL())); holder.videoview.getLayoutParams().height = getScreenWidth(context) * 9 /16; } catch (Exception e) { e.printStackTrace(); } holder.videoview.requestFocus(); holder.videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { holder.videoview.start(); } }); } // 其他原有代码保持不变... }
这样修改后,你的代码应该就能正常编译运行了,视频会自动开始播放。如果需要控制功能,就按照上面的自定义方案来实现就好。
内容的提问来源于stack exchange,提问作者Lavanya Manoj
相关产品推荐
相关产品推荐

