我在我的应用程序中使用 fragment 。使用它们时最常见的问题是使用 getActivity() 时的 NPE。我知道我们可以通过每次检查 getActivity() != null
或检查 fragment isAdded()
来解决它。
在我的一门类(class)中,我在 60 多个地方获取了 Activity 的上下文。检查 getActivity() 是否不为 null 或 fragment 是否仍被添加到所有地方的 Activity 中会使代码变得丑陋、更大且不可维护。还有其他方法可以处理吗? 当它从 Activity 中移除时,甚至有可能销毁 fragment (并停止它在被移除时一直在做的任何工作)吗?
最佳答案
根据我的经验,大多数 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/