2012-03-27 68 views
1

例子:我有3個活動的Android應用程序,它具有以下行爲:如何摺疊「兒童活動」?

A (Home) -> B -> C 

Activity A launches Activity B 
Activity B launches Activity C 

When user is on Activity B and they hit the Back button, it takes them Activity A 
When user is on Activity C and they hit the Back button, it takes them Activity B 

我想,當用戶在活動C是,如果他們打出了「我的根活動」按鈕,它會將它們帶到活動A而不將活動A的新實例添加到後退堆棧。

所以我不希望有:

1) A 
2) A-B 
3) A-B-C 
4) A-B-C-A 

我想的是:

1) A 
2) A-B 
3) A-B-C 
4) A 

我怎樣才能做到這一點?

回答

0

我有每個孩子的活動擴展基本活動。在基本活動中,我定義了一個onActivityResult(),如果堆棧頂部的活動設置了特定的resultCode,則會執行finish()。因此,如果他們點擊活動C上的「我的根活動」按鈕,它將遞歸地上傳到活動A.後退按鈕保持其功能。

這是一個罕見的情況下,我會用「singleTask」但發射活動A涉及重新加載它,我不想情侶活動C.的依賴

0

編輯: 您可以將「singleTaks」或「singleInstance」添加到清單文件中的活動並實現onNewIntent()方法。

「singleTaks」

系統將創建一個新的任務和路線的意圖,它的根活動。但是,如果活動的實例已經存在,則系統通過調用onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。

「singleInstance」

與「singleTask」,區別在於:系統不啓動任何其他活動納入控股實例的任務。該活動始終是其任務的唯一成員。

退房this link

+0

不錯,但如果我在活動C,I將無法返回到活動B - >「當用戶在活動C並且他們點擊後退按鈕時,它將他們活動B」 – 2012-03-27 17:32:32

+0

哦對不起,以爲你不再需要活動B – bughi 2012-03-27 17:37:33

1
+0

你一定要閱讀和理解這個文件。如果您急於尋找,您需要的是「FLAG_ACTIVITY_CLEAR_TOP」。 – sastraxi 2012-03-27 17:34:04

+0

我花了一個小時閱讀該文檔,並且沒有任何關於我定義的用例的內容。最接近的是「singleTask」。我希望將Activity A配置爲使用singleTask,當他們進入Activity C並點擊「My Root Activity」按鈕時,它會執行類似「finishTask()」或類似的操作,以便讓子B和C得到除去。 – 2012-03-27 17:41:00