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

Android Fragment中findViewById(R.id.videoView)返回空值问题求助

问题核心原因

  • 错误通过新建Activity实例查找控件:你代码中new AppCompatActivity().findViewById(R.id.videoView)的写法完全不符合安卓组件逻辑,手动new出来的Activity没有经过系统生命周期初始化,也没有加载任何布局,不可能找到对应控件,必然返回null。
  • 未从Fragment加载的布局实例查找控件:你在onCreateView中已经将Fragment的布局inflate为view实例,所有布局内的控件必须从这个view实例调用findViewById查找,不能依赖Activity查找。
  • 附加问题:你当前使用的Windows本地路径C:\\Users\\USER\\Videos\\video.mp4无法在安卓设备上识别,安卓系统不存在C盘目录,后续修复空指针后还会遇到视频加载失败问题,需要将视频放入安卓项目的raw/assets目录,或是读取安卓设备本地存储的正确路径。

修正后的代码

public class CameraView extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.cameraview_layout, container, false);
        // 从当前加载的布局view中查找VideoView
        VideoView myVideoView = view.findViewById(R.id.videoView);
        playVideo(myVideoView);
        return view;
    }

    public void playVideo(VideoView myVideoView){
        // 这里替换为安卓环境下可访问的视频路径,例如raw目录下的资源:
        // Uri uri = Uri.parse("android.resource://" + requireContext().getPackageName() + "/" + R.raw.video);
        myVideoView.setVideoURI(Uri.fromFile(new File("替换为安卓设备可访问的视频路径")));
        myVideoView.setMediaController(new MediaController(myVideoView.getContext()));
        myVideoView.requestFocus();
        myVideoView.start();
    }
}

内容的提问来源于stack exchange,提问作者Aperture Lab Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:00