Fragment中getActivity()空指针异常的原因

1、getActivity()空指针
2、异常:Can not perform this action after onSaveInstanceState
3、Fragment重叠异常-----正确使用hide、show的姿势
4、Fragment嵌套的那些坑
5、未必靠谱的出栈方法remove()
6、多个Fragment同时出栈的深坑BUG
7、深坑 Fragment转场动画

一、getActivity()空指针

原因:activity在可能发生内存回收状态时会调用 onSaveInstanceState方法保存状态, Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity。
解决办法

1、Fragment强引用Activity( 有引起内存泄露的风险,但是相比Crash,这种做法可以接受的)
protected Activity mActivity;   
 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mActivity= (Activity) context;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mActivity= null;
    }
2、从Activity保存/恢复状态入手

第1种、不保存fragment的状态: 在Activity中重写onSaveInstanceState方法,将

  //super.onSaveInstanceState(outState);

注释掉,让其不再保存Fragment的状态,达到fragment随MyActivity一起销毁的目的。
第2种 、重建时清除已经保存的fragment的状态:在恢复Fragment之前把Bundle里面的fragment状态数据给清除。方法如下:

    if(savedInstanceState!= null){
            String FRAGMENTS_TAG = "android:support:fragments";
            savedInstanceState.remove(FRAGMENTS_TAG);
        }

你可能感兴趣的:(Fragment中getActivity()空指针异常的原因)