本篇文章講解自己探討的Activity動態添加Fragment時,分4種情況:
1.使用replace(),且不加入回退棧addToBackStack(null);
2.使用replace(),且加入回退棧addToBackStack(null);
3.使用add(), 且不加入回退棧addToBackStack(null);
4.使用add(), 且加入回退棧addToBackStack(null);
以下爲對這4種情況Fragment與Activity生命週期之間:
注:以下1-->FirstFragment;2-->SecondFrgment;3-->ThirdFragment
---------------------------------------------我是你們期待的分割線---------------------------------------------------------------------
1使用replace(),且不加入回退棧addToBackStack(null):
第一次replace(1)時:
第一次replace(2)時:
第一次replace(3)時:
點擊一次Back鍵即退出當前Activity:
使用replace()方法添加Fragment,效果如同於remove()+add()fragment;執行到onDetach();
2.使用replace(),加入回退棧addToBackStack(null):
第一次replace(1)時:
第一次replace(2)時:
第一次replace(3)時:
第二次replace(1)時:
點擊Back鍵回退時,棧中fragment依次彈出
點擊Back鍵退出Activity:
以上可以看出,使用replace()時,加入回退棧與不加入回退棧(即是否調用addToBackStack(null)方法)之間的區別在於:不加入回退棧,替換當前fragment是,被替換的fragment會執行onDetach()方法,若加入回退棧則只調用到onDestoryView()方法;加入回退棧,每次replace()都會向棧中添加fragment;
3.使用add(),不加入回退棧addToBackStack(null):
第一次add(1):
第一次add(2):
第一次add(3):
添加三個fargment,屏幕熄滅時調用:
添加順序1,2,3後再次點擊1/2/3,Activity/Fragment生命週期無變化,點擊Back鍵直接退出:
以上,可看出當調用add()替換時,fragment生命週期保持同步,在Back鍵後直接退出Activity,Fragment按添加順序銷燬
4.使用add(),加入回退棧addToBackStack(null):
add(1)時:
add(2)時:
add(3):
突然無法上傳圖片了,就用文字描述吧,添加3時候和第三種情況添加3時相同;
最後點擊Back鍵時是從回退棧中挨個彈出fragment之後,再點擊退出Activity,如本例中3個fragment需要點擊4次Back鍵,方可退出當前Activity,而非直接退出Activity
以上這些均是Demo測試的結果,可能存在錯誤,歡迎各位指正。