關於fragment回退棧的相關問題

2021-08-21 06:07:14 字數 2479 閱讀 2078

一、fragment回退棧

activity切換時,相信大家都知道是通過棧的形式,不斷壓棧出棧,在fragment的時候,如果你不是手動開啟回退棧,它是直接銷毀再重建,但如果將fragment任務新增到回退棧,情況就會不一樣了,它就有了類似activity的棧管理方式。

二、準備工作

2、activity中,初始化新增fragment1,但不新增回退棧

fragment1 f1 = new fragment1();

fragmenttransaction ft = getfragmentmanager().begintransaction();

//fl為佔位布局

ft.add(r.id.fl, f1);

ft.commit();

fragment2 f2 = new fragment2();

fragmentmanager fm = getfragmentmanager();

fragmenttransaction tx = fm.begintransaction();

tx.replace(r.id.fl, f2);

//將當前的事務新增到了回退棧

tx.addtobackstack(null);

tx.commit();

//回退到fragment1

fragmentmanager fm = getfragmentmanager();

//將當前的事務退出回退棧

fm.popbackstack();

//跳轉到fragment3

fragment3 f3 = new fragment3();

fragmentmanager fm = getfragmentmanager();

fragmenttransaction tx = fm.begintransaction();

tx.replace(r.id.fl, f3);

tx.addtobackstack(null);

tx.commit();

//回退到fragment2

fragmentmanager fm = getfragmentmanager();

fm.popbackstack();

三、測試有回退棧時fragment的生命週期

(1)初始化

回退棧 init.png

此時是正常的,到resume,fragment1啟動並顯示

回退棧 fragment1到fragment2.png

此時注意fragment1的生命週期,執行了ondestroyview()但未執行destroy(),因為它只是介面消失了,並沒有銷毀

回退棧fragment2到fragment3.png

同上,注意fragment2的生命週期

回退棧fragment3返回fragment2.png

此時注意fragment2的生命週期,執行了oncreateview()但未執行oncreate(),因為它只是將介面顯示出來了,並沒有建立新的例項;而此時fragment3退棧,真正銷毀了

回退棧fragment2返回fragment1.png

同上,注意fragment1的生命週期;此時fragment2退棧,真正銷毀了

(6)返回鍵退出

回退棧 按返回鍵退出.png

程式退出,fragment1銷毀

另外,可以通過

getfragmentmanager().getbackstackentrycount()
可以得到回退棧中的當前總的個數,每新增一次回退棧該數會加

Fragment回退棧和傳值

多個fragment巢狀 根據呼叫的fragment,新增到回退棧裡面一層一層退出。獲得管理者 fragmentmanager manager getsupportfragmentmanager 獲得事務管理者 fragmenttransaction fragmenttransaction mana...

fragment的回退總結

第乙個引數就是 fragmenttransaction呼叫commit 返回後的整數,第二個引數傳0表示回退到第乙個引數包含的狀態,傳fragmentmanager.pop back stack inclusive表示第乙個引數的狀態也回退調。第乙個引數是 fragmenttransaction的 ...

關於Fragment之間的互動

override public void onattach activity activity 二 新的onattach context context 方法,由於引數是context,可以直接獲得宿主activity的物件,避免了使用介面的步驟,更加簡單。public void onattach ...