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