2010-01-20 172 views
1

我有以下內容:Android:搬運活動堆棧

活動A, B, C, DAD可以在任何時間,任何地點從應用程序到達。

BC均達到這樣的:

A -> B -> C 

我有以下的用例:

用戶輸入CA -> B -> C)然後她去了D

當她想要去A時,我想將她轉移到已從A開始的隊列 - 換句話說,我想讓她去開始的C

類似這樣的A -> B -> C -> D -> (same) C。但我不想從活動堆棧中丟失D。之後,當她按下「後退」按鈕時,她又被轉移到D

這是可能和正確的嗎?最佳做法是什麼?

如果我沒有足夠清楚地解釋我的情況,請隨時提問。
提前10倍,
丹納伊

回答

3

不幸的是,你不能這樣做。 The documentation says the following

注意的是,當一個新的活動實例被創建來處理新的意圖,用戶可以隨時按返回鍵,返回到以前的狀態(以前的活動)。但當活動的現有實例處理新的意圖時,在新意圖抵達之前,用戶不能按BACK鍵返回該實例正在進行的操作。

基本上你不能在同一時間在堆棧中的兩個地方有同樣的Activity C實例。

但是,您可以通過將Activity C的臨時狀態保存到Application object來使您的應用程序看起來就是這種情況。這將允許活動C的所有實例共享狀態,並且看起來好像它們是相同的實例。

您需要創建Application的自己的子類,然後從onResume()onPause()的Activity C中讀取並寫入它。

+0

10x!我會嘗試的。 – Danail 2010-01-22 14:30:28

+0

其實,從另一個答案只是張貼這一點,有一種方法可以做到這一點: 「你可以試試這個FLAG_ACTIVITY_REORDER_TO_FRONT(該文件描述正是你想要什麼) http://developer.android.com/reference/ android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT「 – Danail 2010-10-25 14:10:50

+0

@Danail - 這並不完全符合你的要求。它會將順序改爲「A→B→D→C」,這意味着從活動D回退會將用戶帶到「B」。 (我認爲無論如何都是閱讀文檔,我沒有嘗試過。) – 2010-10-25 14:46:03