今天在项目里遇到这个问题,在请求接口后返回的时候getactivity一直为null的问题,尝试了各种方法之后依旧不行,最后发现连TextView.setText都空指针了
这时候才认真的去查看原因,发现主要还是自己对activity和fragment的生命周期理解不透彻
这里也算拾人牙慧了,fragment具体生命周期如下
生命周期分析:
- fragment被创建的时候
- onAttach()
- onCreate()
- onCreateView()
- onActivityCreated()
2.fragment对用户可见的时候 - onStart()
- onResume()
- fragment进入“后台模式”的时候
- onPause()
- onStop()
- fragment被销毁的时候
- onPause()
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
- 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
- onCreate()
- onCreateView()
- onActivityCreated()
- fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
- onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
- onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
- onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
- onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
- onDetach() —— 当fragment和activity分离的时候,调用这个方法。
博主最后去试了下,的确当fragment被show的时候,getActivity是可以获取到的,如果仅仅是add和实例化fragment依旧会返回null
那么如果当我们需要在fragment没有show的时候进行接口请求和视图设置的时候该怎么怎么办?
博主这里推荐的方法是如果在接口请求里面需要用到Context的话,例如Dialog和Progress的时候,不妨用项目里Application的Context代替
而当我们需要设置View的话,最好还是在fragment获取到视图后设置,如果你需要设置的数据是接口数据的话,可以在activity请求在你切换到fragment后进行设置,这样就可以有效避免获取不到activity的尴尬