2012-03-19 48 views
0

我有三個活動A,B和C.
A是我的應用程序的主要活動。
A和C,也可以從選項菜單開始,B從A
開始我想以下行爲:如何清除完整背堆棧(以及可能的解決方案)

  1. 應用程序開始使用A:回堆棧{A}
  2. 從A,我瀏覽到B:回堆棧{A,B}
  3. 從選項菜單,我開始C:返回堆棧{C}

1和2是微不足道的,但我沒有成功讓3工作。

我嘗試了很多FLAG_ACTIVITY的組合,但沒有成功
我感覺這是不可能的。

我在考慮創建一個DummyRoot活動,它只是用來啓動另一個活動(在Intent.getExtras()中傳遞實際的活動名稱來啓動)。我可以給這個DummyRoot活動FLAG_ACTIVITY_CLEAR_TOP。
通過這樣做,我會得到

  1. 應用與DummyRoot(A)開始:背堆棧{DummyRoot,A}
  2. 從A,我瀏覽到B:回堆棧{DummyRoot,A, B}
  3. 從選項菜單,我開始DummyRoot(C):回堆棧{DummyRoot,C}

你預見到這種方法的問題? 這是首先需要的還是可以以更優雅的方式清除後堆棧?

回答

0

因此,當您在C中按回時,您希望應用程序退出?如果是這樣,您將需要在清單中使用Flags,並在使用Intent啓動Activity時使用。這裏的組合將允許您清除當前的任務,然後使用新的活動啓動一個新的任務。它似乎不是一個有效的用戶體驗,但應該做的伎倆。請在文檔中詳細閱讀FLAGS以獲取更多信息,瞭解他們將實際執行的操作。

+0

您可以指出在啓動C時應使用哪些標誌從後端堆棧中刪除A/B?我確實閱讀了文檔,但沒有找到合適的組合。 – 2012-03-19 16:40:02

+0

我會說,FLAG_ACTIVITY_CLEAR_TASK將是一個看看,也是下面的文檔http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html – Mimminito 2012-03-19 16:42:21

+0

這看起來確實像一個很好的候選人,但是......它只能從API級別11獲得,並且我必須支持API級別8(應該提到,以此開始)。 – 2012-03-19 16:45:03