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
相关产品推荐
相关产品推荐

