2014-04-28 80 views
5

我在我的android應用程序中有一個處理多個視圖/片段替換的活動。此活動還具有導航抽屜以導航至頂級片段。從頂級片段中,您可以導航到詳細級片段。
通過從左側滑入導航抽屜,可始終訪問導航抽屜。如果當前片段是頂級片段,則導航 - 抽屜也可以通過操作欄訪問。如果當前片段是詳細級片段,則可以通過操作欄(或通過按下後退按鈕)導航回來。清除backstack並用頂級片段替換當前片段

可以說我有3個頂級碎片可以通過導航抽屜進行訪問。
fragment[1]fragment[2]fragment[3]

fragment[1],你可以瀏覽到詳細級fragment[1.1]

現在用戶想要從當前的fragment[1.1]直接導航到頂層fragment[3]。用戶只需在導航抽屜中滑動並點擊fragment[3]的項目。
現在,如果用戶點擊後退按鈕,應用程序應該關閉(因爲它導航到頂級片段)。所以每次用戶導航到頂層片段時,都應該清除後臺堆棧。要檢查是否應顯示抽屜指示器,我正在讀取getBackStackEntryCount() - 值並將其與0進行比較。

作爲總結。我想從細節層次的片段導航到任何頂層片段並清除後臺堆棧。

問題:
當我通過執行
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
片段交易清除返回堆棧反向重播(例如通過fragment[1.1]更換fragment[1])。我不希望他們被重播。我在onCreateView,onViewCreated,onStart等方面進行了大量的初始化操作,並且還啓動了獲取數據的任務。我想跳過這一切。只需用一個尚不在背後的新頂級層次替換細節層次視圖即可。

我找不到任何解決方案來清除沒有彈出交易的後臺堆棧。
有沒有一個乾淨的解決方案來處理這個問題?我是否必須實現自己的後臺行爲?

編輯: YouTube應用程序也表現得如此。當您從細節導航到頂層時,後臺將被清除。但是他們如何清除backstack而不重放fragment-transactions?

感謝您的回答。

回答

1

我認爲你的問題是你正在循環中彈出碎片 - 我猜。我通常會在片段堆棧中將片段與指定自定義動畫一起推送 - 比如從右側滑動新片段,並在彈出時將其滑出到右側。現在 - 如果您的用戶導航到了片段1,然後是1.1,然後是1.2等,並且您希望在用戶單擊操作欄中的主頁按鈕時導航回1 - 爲片段1事務指定名稱。你執行的彈出使用該名稱。另外考慮使用popBackStack函數而不是popBackStackImmediate。