在Fragment中getActivity()为空问题已解决

来源:互联网 发布:域名符号有什么用 编辑:程序博客网 时间:2024/05/16 15:45

最近在做一个ViewPager+Fragment多个标题切换的项目中,突然切换多次后发现适配器中抱了java.lang.NullPointerException,所用到的对象是getActivity(),通过debug得到getActivity(),而得到的是null。但是我在其他方法中又可以得到。

CastleActiveFriendAdapter adapter = new CastleActiveFriendAdapter(getActivity(), activeUsersTotal, 0,fightAreaId);listView.setAdapter(adapter);
通过观察代码,而理论上getActivity()应该得到的是主线程的activity,故得不到activity。又因为getActivity()必须在生命周期onAttach与onDetach之间调用才有效,所以解决的办法在onAttach中将上下文进行保存,如下:

Activity mActivity;@Overridepublic void onAttach(Activity activity) {   super.onAttach(activity);   mActivity = activity;//保存activity引用}
这下问题解决了:
CastleActiveFriendAdapter adapter = new CastleActiveFriendAdapter(activity , activeUsersTotal, 0,fightAreaId);listView.setAdapter(adapter);
总结:当遇到getActivity()为null,或getContext()时,先冷静想想以下3点:
 1. 是不是放在了第三方的回调中
 2. 是不是在其他进程中调用了(其实第一点就是在其他进程中调用了)
 3. 是不是调用时不在指定生命周期范围内(onAttach与onDetach之间)
一般不是上述情况就不会得到null啦,如有不足,欢迎提出,谢谢。

原创粉丝点击