2011-06-16 93 views
9

當我的籌碼是在這種情況下:如何管理活動堆棧?

A->B->C 

如果我開始d活動,我想該活動堆棧變爲:

A->D 

注意,活性C是一個對話框。

回答

4

這裏是將要做的步驟:

  • 來自活動C啓動與布爾fromActivityC捆綁在一起的活動A與意圖和標記FLAG_ACTIVITY_CLEAR_TOP集合。
  • 現在開始創建活動首先檢查此布爾「fromActivityC」,如果存在,啓動活動D否則正常流程繼續。

    // following code can be used to get the boolean in the oncreate 
    boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC"); 
    

阿律解決方法,但希望它可以幫助

+0

謝謝,有趣的技巧,它運行...但鍵盤上鍵入我有一個想法:當A呼叫B,完成A;當B返回時,重新創建A;當C調用D時,用FLAG_ACTIVITY_CLEAR_TOP創建D。 Yessss! – Michele 2011-06-16 13:32:19

+0

是的,應該工作..但是你不覺得重新創建這樣的活動每次都會花費很多cpu週期,並且會破壞活動堆棧的目的..有些事情需要思考:) – Nitin 2011-06-16 13:35:21

1

有點哈克,但在清除棧,然後開始活動D.

活動A 可能消失之前出現了片刻雖然

2

有幾種方法,以消除你可以開始一個活動從堆疊中移除活動或防止堆疊:

要從堆棧中移除您的活動,只需撥打finish(),請參閱here

您也可以在清單中實現以下屬性:android:noHistory =「true」,它可防止堆疊活動。啓動A.當

您的代碼應該是這樣的Removing an activity from the history stack

1

你可以嘗試完成ActivityB當您啓動ActivityCActivityC相同:

Intent i = new Intent(this.class.ActivityC); 
startActivity(i); 
ActivityB.finish(); 

看到這個問題的形式詳細

+0

我不能,活性C是一個對話框。如果我在C開始時完成B,我會看到C下的A。 – Michele 2011-06-16 10:22:17

0

基於C的回調,傳遞消息回到A和ACALL完成啓動d,這將結束B和C(因爲C是除了B)。

0

這裏不取決於A評估Intent內容更好的解決方案: 使用標誌FLAG_ACTIVITY_TASK_ON_HOME

你也應該看看其他標誌Android Intent