Android fragment getActivity() = null

标签 android android-fragments nullpointerexception android-activity

我在我的应用程序中使用 fragment 。使用它们时最常见的问题是使用 getActivity() 时的 NPE。我知道我们可以通过每次检查 getActivity() != null 或检查 fragment isAdded() 来解决它。

在我的一门类(class)中,我在 60 多个地方获取了 Activity 的上下文。检查 getActivity() 是否不为 null 或 fragment 是否仍被添加到所有地方的 Activity 中会使代码变得丑陋、更大且不可维护。还有其他方法可以处理吗? 当它从 Activity 中移除时,甚至有可能销毁 fragment (并停止它在被移除时一直在做的任何工作)吗?

Also Is this way a suggested one?

最佳答案

根据我的经验,大多数 getActivity() 返回 null 的情况都发生在异步回调中。

例如,您的 fragment 触发一个 AsyncTask,然后在后台作业完成之前被移除,然后当后台作业完成并在 onPostExecute() 中调用 getActivity() 时,它将得到一个 null,因为该 fragment 已经脱离 Activity 。

我的解决方案:

1.在每个异步回调开始时检查getActivity()==null,如果是这样就中止该方法。

2.在onDetach()中取消异步作业。

而且我认为这是比在 onAttach() 中保存 Activity 实例更好的解决方案,因为既然您的 fragment 已被删除,为什么还要费心去做回调中剩下的所有工作(在大多数情况下是 UI 代码)?

关于Android fragment getActivity() = null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125731/

相关文章:

java - 使用 XOM 解析 XML 时出现空子元素

android - 找不到 google-play-services_lib

android - 如何使用辅助构造函数中的 val?

android - 如何在自定义复选框 View 上保留支持库复选框的样式?

android - Android fragment 中的手电筒 - SurfaceView

java - 如何正确设置带有 Fragments 的 RecyclerView 作为 child

java - 如何进行深色模式设置

java - OpenGL 纹理删除时出错

android - Android SQLiteDatabase 中的光标大小限制

java - 视频播放器工作室mp4