最近在做一个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;
@Override
public 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啦,如有不足,欢迎提出,谢谢。