java - 方法调用 getActivity().getSupportFragmentManager() 可能会在片段中产生空指针异常
问题描述
“这是我的代码和图片链接”
MyFragment newFragment = new MyFragment();
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
ft.replace(R.id.guide_frame_container, newFragment)
.addToBackStack(null)
.commit();
解决方案
这是一个 Android Studio 警告,没有错误。但是你应该关心它!
getActivity()
不保证总是返回一个活动。例如,当片段已创建但尚未附加时,即getActivity()
在构造函数中调用时将始终返回 null。同样getSupportFragmentManager()
需要附加片段,以获取其相应的片段主机。
因此,您必须确保仅在众所周知的上下文中调用这些函数,在该上下文中保证附加片段(如在onAttached()
函数中),或者您必须将调用包装在空检查中
此外,绝对不清楚在哪里调用这些函数。我假设,您尝试调用那些static Fragment newInstance()
将为您创建片段的函数内部。但是,您永远不应该尝试将片段附加到那里。它应该由主机活动完成。
推荐阅读
- unity3d - FFMPEG 从 .mov 转换为 .webm -“无法找到适合 vp8 的输出”
- php - PDO 中的多个创建触发器查询
- java - @Required 默认情况下不按名称自动连接
- django - 对象模型数组
- php - php ON DUPLICATE UPDATE 不起作用
- c# - 为什么 IdentityServer4 代码会破坏我的身份项目?
- jquery - JQuery 统计序列化的项目数
- c# - ASP.NET MVC 5:log4net 不写入文件
- jquery - 按钮作为提交和调用函数
- javascript - 如何获取列表中项目的索引并将其映射到 json 对象以执行 onClick 事件