Android 的 Fragment 中使用 getActivity( )空指针异常的原因及解决办法
一、原因
getActivity() 空指针
原因:activity在可能发生内存回收状态时会调用 onSaveInstanceState方法保存状态, Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity。
二、解决办法
可重写 Fragment 的 onAttach() 方法中获取 Activity 并赋值给成员变量,然后在需要使用 getActivity() 的地方使用该成员变量就可以了。具体解决如下:
1.在Fragment中先声明一个Activity(为了获取全局的Activity,Activity有时会销毁,你通过getActivity调用不到了)
private Activity activity;
2.在Frament中添加如下方法,你肯定懂的。此时我们就获得了一个不会销毁的activity对象,哈哈。
public void onAttach(@NonNull Context context) {
super.onAttach(context);
this.activity=getActivity();
}