学而实习之 不亦乐乎

Android 的 Fragment 中使用 getActivity( )空指针异常的原因及解决办法

2024-01-03 20:40:44

一、原因

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();
}