我在fragment中ToastHelper.showToast(getActivity(), msg, Toast.LENGTH_SHORT);总是频繁的报空指针
然后我把ToastHelper中加了判断,context不为空才去执行代码
并且getActivity()改成了getActivity().getApplicationContext(),这下报的更勤了
其实前面加判断是ok的,只是因为getActivity()很容易为null,再去getApplicationContext()不报错才怪了
没办法,我只能加了个异常处理,但这并没有找到问题的根本
后来才发现,我在这个fragment中每个用到context的地方都是直接用getActivity(),
getActivity()这个方法会返回当前Fragment所附加的Activity。当fragment生命周期结束并销毁时,getActivity()返回的
会是null。
所以应该定义一个全局的context=getActivity();供整个fragment调用。
附带记录一下:
发现fragment里有一个initstate方法,在activity被替换掉的时候mActivity便赋值给了null。如图:
而这个方法会在replace操作的时候执行,意思就是替换fragment的时候被替换的fragment会执行initstate()方法,会把
原先的mActivity重新赋值为null,如果此时涉及到异步操作并需要context的话,便会抛出空指针异常,因为在异步操作
完成前fragment已经执行initstate()了,mActivity已经被重新赋值为null了,所以如果此时调用getactivity的话会抛异
常。