You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FullscreenVideoView在RecyclerView播放视频遇setMediaController方法找不到错误求助

解决FullscreenVideoView无法调用setMediaController的问题

嘿,我看到你遇到的问题了——FullscreenVideoView找不到setMediaController()方法对吧?这是因为这个自定义视频视图库并没有实现原生VideoView的setMediaController接口,原生VideoView自带这个方法,但FullscreenVideoView专注于全屏播放的特性,没有集成这个功能,所以直接调用就会报错。

快速修复步骤

首先,你需要移除代码中调用setMediaController的相关代码,因为这个方法在FullscreenVideoView里根本不存在:

  1. 删掉类开头声明的无用成员变量:
private MediaController mediaController;
  1. 去掉构造函数里的MediaController初始化代码:
mediaController=new MediaController(context);
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:32