我們有一個Activity包含一個SlidingMenu(https://github.com/jfeinstein10/SlidingMenu),其中有三個選項,我們稱它們爲A,B1,C1。這些對應於我們在活動中顯示的片段。當您從SlidingMenu中選擇不同的選項時,我將通過FragmentManager將當前片段替換爲新片段。清除Android Fragment沒有彈出的背堆棧?
從片段B1你可以去其他兩個,我們稱他們爲B2和B3。這裏我們需要Back鍵帶你從B2-> B1或者B3-> B1,所以我調用了transaction.addToBackStack(null)。如果我們在B2或B3上從SlidingMenu中選擇一個選項,我們希望清除後退堆棧,因此我使用此問題Clear back stack using fragments中建議的代碼,該代碼調用popBackStack()直到它清除。
到目前爲止這麼好。
從片段C1,你可以去片段C2。作爲C1/C2比較主/明細設計我使用
fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right,
R.animator.slide_out_to_left, R.animator.slide_in_from_left,
R.animator.slide_out_to_right);
添加幻燈片動畫其中C1滑出,以左側爲C2從右邊滑動,反之亦然。在C2上按下後退鍵使我們回到C1,並帶有相反的動畫,而且都很好。
但
如果選擇從SlidingMenu A或B1和我們popBackStack()來獲取從後面堆擺脫C1的,那麼它的幻燈片C2出來的權利,這看起來很奇怪。我想要做的是在不運行動畫的情況下清除背面堆棧,但我找不到這樣做的方法。我試着調用popBackStackImmediate()來代替,但這似乎沒有任何區別。
作爲一種替代方案,我想我可以避免調用addToBackStack,而是通過Activity.onBackPressed()手動處理用戶按下後退鍵,但也許有一種解決方案我只是看不到?
這似乎正是我所需要的。謝謝! – 2013-04-26 13:06:33
@JonathanCaryl太棒了!我很高興它的工作,因爲我真的不是100%肯定會這樣:) – TronicZomB 2013-04-26 13:07:24
不支持我的支持庫v23.1.1 – 2015-12-21 16:10:47