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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值