2012-07-06 48 views
6

後退堆棧的我想修改後堆在我的Android應用程序,例如:修改Android中

眼下,這裏是流量:

甲 - >乙 - 「ç - > D - > E - > F

我希望能夠修改回棧,以便當用戶進入活動F時,D和E從堆棧中刪除。所以如果用戶碰到後面,流程是F - > C.

另外,從F開始,用戶能夠進入活動B,這也應該擦除C,D,E和F.

我已經看到了一些關於能夠清除堆棧或刪除頂部項目的信息,但是當觸發一個活動時,我想從堆棧中刪除一些項目。

任何幫助表示讚賞,非常感謝。

回答

9

您可以創建一個意圖,標誌爲intent.FLAG_ACTIVITY_CLEAR_TOP,從F到C.然後,您將必須以意圖調用startActivity(),並觸發它發生onBackPressed或類似事件。

Intent i = new Intent(this, C.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i) 

看到這個答案,當你導航回到它也有保證是c不會重新啓動交易:https://stackoverflow.com/a/11347608/1003511

什麼FLAG_ACTIVITY_CLEAR_TOP會做的就是去回到最近的活動實例C在堆棧上,然後清除它上面的所有內容。但是,這可能會導致重新創建活動。如果您想確保它將是該活動的同一個實例,請使用FLAG_ACTIVITY_SINGLE_TOP。從文檔:

活動B在上面的例子中當前運行的實例將 要麼接受你是從這裏開始,在其 onNewIntent()方法的新意圖,或者是本身完成,與新 重新啓動意圖。如果它已宣佈其啓動模式爲「多個」(默認爲 ),並且您沒有將FLAG_ACTIVITY_SINGLE_TOP設置爲相同的 意圖,則它將被完成並重新創建;對於其他所有啓動 模式的FLAG_ACTIVITY_SINGLE_TOP,如果設置了FLAG_ACTIVITY_SINGLE_TOP,則此Intent將被傳送到當前實例的onNewIntent()中 。

編輯:這類似於你想要做什麼的代碼示例:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent a = new Intent(this, C.class); 
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(a); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

代碼示例源:https://stackoverflow.com/a/9398171/1003511

+0

這很完美。非常感謝你的幫助。 – mwrazam 2012-07-07 04:39:43

2

你需要的是android:excludeFromRecents="true"必須添加到清單文件的Activity標籤中。它會停止所有活動,將具有此標記的堆棧放入清單中的Activity標記中。

示例代碼

<activity 
      android:name="com.xx.xx.ActivityName" 
      android:excludeFromRecents="true" 


     </activity> 

,並確保你叫finish()這些動作的方法,你不希望在活動堆棧(開始另一項活動後)。

+0

你好,這將使活動從歷史當中ISN完全消失我想要什麼。我希望活動僅在某些其他活動被解僱後消失。感謝您的幫助! – mwrazam 2012-07-07 04:40:38