2017-05-04 227 views
0

我有一個「a-b-c-d」活動歷史記錄。 我想殺死活動「c」和「d」並開始一個新的「x」活動,以便新訂單變成「a-b-x」。Android活動堆棧管理

Intent i = new Intent(D.this,B.class); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
i.putExtra("start_x", true); 
startActivity(i); 
if (getIntent().getBooleanExtra("start_x", false)) { 
    Intent i = new Intent(B.this,X.class); 
    startActivity(i); 
} 

這就是我這樣做(我用了很多次)。 有沒有更簡單的方法來做到這一點?

編輯:我忘了寫這個:有必要按下後退鍵並轉到「C」活動,而在「D」。

+0

你在做什麼是最簡單和最直接的方式來做到這一點。您還可以將'Intent.FLAG_ACTIVITY_SINGLE_TOP'添加到您用來從'B'開始'D'的'Intent',並將重用'B'的現有實例。你應該在'B'中重寫'onNewIntent()'並從那裏檢查額外的和(可選的)開始'X'。 –

+1

謝謝大衛 – FixeFixe

回答

0

您可以通過2種方式來完成此操作。

第一種方式

在AndroidManifest.xml中,C和d活動添加屬性android:noHistory="true"

第二種方式

在C活性和d活動,在單擊添加時一隻旗。

例:

Intent i = new Intent(C.this, D.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(i); 

做同樣爲d的活動也...

+0

我忘了寫遺憾。這是必要的後退鍵,並進入c活動,而在d – FixeFixe

0

加入@BHARADWAJ COUNDINYA上述答案

三分之二方式:

我會操縱我的活動堆棧是這樣的:

從A到B:

//In A 
Intent intent = new Intent(this, B.class); 
startActivity(intent); 

[活動堆棧:A-> B]

從B到C:

//In B 
Intent intent = new Intent(this, C.class); 
startActivity(intent); 

[活動堆棧:A-> B-> C]

從C到d(此時我將使用光潔度()):

//In C 
Intent intent = new Intent(this, D.class); 
startActivity(intent); 
finish(); 

[活動起粘性:A-> B-> d]

如果是d,如果我的唯一目的在於以啓動X時用戶導航回到:

//In D 
protected void onPause() { 
    super.onPause(); 
    Intent intent = new Intent(this, X.class); 
    startActivity(intent); 
    finish(); 
} 

[活動堆棧:A-> B- > X]

現在,如果用戶從X它將降落在乙再次導航回到:

[活動堆棧: A-> B]

+0

我忘了寫遺憾。有必要按下後退鍵並轉到c活動,然後在d – FixeFixe

+0

中,從b c d回到c,然後返回到x我是吧? –

+0

然後在c中檢查條件並通過自我完成來啓動x,這樣c就不會在堆棧中,並且當用戶從x導航回時,它可能落在B. –