2014-04-24 194 views
0

我有三個活動A,B和C,C位於活動堆棧頂部。 C包含片段,f1,f2。點擊一個按鈕,我想用「f2」代替「f1」並完成活動A,B。任何想法如何實現。完成不在活動堆棧頂部的活動

+0

查看我的答案。點擊啓動Activity D並添加f2片段。 – Libin

回答

1

嘗試在啓動活動D時使用Intent.FLAG_ACTIVITY_CLEAR_TASK。這將清除堆棧中的所有活動,但包括活動C中的你的情況。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

它將清除堆棧中的所有活動。

FLAG_ACTIVITY_CLEAR_TASK標誌將導致在活動啓動之前將與活動關聯的任何現有任務清除。即活動成爲新的根,任何舊的活動都結束了。此標誌只能與FLAG_ACTIVITY_NEW_TASK聯合使用

0

這個怎麼樣,第一

Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Removes other Activities from stack 
    //Add Intent Extra to Start Activity C 
    intent.putExtra("startC", true); 
    startActivity(intent); 

添加一個額外的意圖,然後拿到活性的 的意圖,如果額外回來意圖額外的真正開始活動C,和

finish(); //Activity A. 

    intent.putExtra("startD", true); 

搶意圖開始活動d,那麼C將成爲堆棧下d

我的建議是要Activit清除棧y A,有意開始指定的活動,然後將意圖堆疊到您需要去的地方,希望這是有道理的。

如果你正在尋找有唯一的活動d在最前面,用這個

 Intent intent = new Intent(this, ActivityD.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     // Removes other Activities from stack 
     //Start Activity 
     startActivity(intent) 
0

我要去說使用intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);但它只是要清除所有活動在它的頂部..

我會建議創建一個靜態方法或可能處理程序..有一個完成方法對他們,所以你可以自由地完成任何你想要的活動,通過調用他們沒有完成所有的活動。

創建一個靜態處理您的每一個活動A,B,C,d的:

public static Handler h; 

h = new Handler() { 

     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 

      switch(msg.what) { 

      case 0: 
       finish(); 

    } 

}; 

在您的按鈕點擊數聽衆:

FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction(); 
     transaction.replace(layout, fragment, tag).commit(); 

ACTIVITY_A.h.sendEmptyMessage(0); 
ACTIVITY_B.h.sendEmptyMessage(0); 

eachtime調用處理程序將完成活動A和B也替換片段

+0

謝謝! Intent.FLAG_ACTIVITY_CLEAR_TOP清除堆棧中的所有活動,我想清除「特定事件」上的活動,我希望所有活動都在堆棧中,直到「特定事件」被觸發。我不認爲CLEAR_TOP不會完成我的目的。 – Blanc

+0

@Blanc然後創建一個靜態方法或處理程序,正如我剛纔所說.. –

+0

謝謝!!你說的話很有道理,不幸的是我正在使用片段,並且沒有啓動任何新的活動,而是在執行這個事件之前替換「前一個片段」,我也必須清除我的活動棧。 – Blanc

0

問題已解決。感謝FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_CLEAR_TOP標記

+0

您是否在接受我的答案時發現任何問題? 。它可能會幫助其他人 – Libin

+0

我不知道如何接受答案:(。沒有找到任何按鈕或鏈接來這樣做。讓我知道如何做到這一點。 – Blanc

+0

您可以在我的答案下方看到一個勾號。 – Libin