问题:
使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒
-
思考
-
为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的
-
多数的回答就是:大多数情况下的原因:你在调用了getActivity()时,当前的Fragment已经onDetach()了宿主Activity。比如:你在pop了Fragment之后,该Fragment的异步任务仍然在执行,并且在执行完成后调用了getActivity()方法,这样就会空指针。
getActivity()不是在当前Fragment中调用的么,当前Fragment怎么会onDetach()呢?
-
源码
- fragment 的生命周期
-
可以看到Fragment比Activity多了几个额外的生命周期回调方法:
onAttach:onAttach()在fragment与Activity关联之后调调查用。需要注意的是,初始化fragment参数可以从getArguments()获得,但是,当Fragment附加到Activity之后,就无法再调用setArguments()。所以除了在最开始时,其它时间都无法向初始化参数添加内容。
onCreate:fragment初次创建时调用。尽管它看起来像是Activity的OnCreate()函数&