2014-01-20 41 views
0

我有一系列的多個活動,並且在某些時候我想要在我的應用程序的不同部分中進行操作,而且我不希望在堆棧中擁有以前的活動。 就像這樣:活動A - >活動A1 - >活動A2 - >活動A3 - >活動B完成後未調用OnActivityResult

當我開始活動B時,我想關閉所有的活動。

最簡單的方法,我認爲是setResult然後finish最後一個活動,並在以前的活動,以及在傳遞相同的數據後查找結果和關閉活動。

所以我setResult然後finish A3之前開始B.

的問題是,A3已完成,但onActivityResult不叫上A2,直到我關閉B,使A2應該恢復。

我認爲onActivityResult不能傳播到多個活動,如果另一個啓動它的頂部。

然後我被封鎖了。我不知道該怎麼做,或者是否有另一種方式一次性關閉多項活動。

+0

當你打算下一個活動時,你不能完成()一項活動嗎? – Nfear

+0

關閉A2不啓動B.當從A啓動onActivityResult時啓動B – Blackbelt

+0

您使用「startActivityForResult()」啓動活動? – VincentLamoute

回答

3

你將不得不啓動A的所有活動,startActivityForResult()。當你開始活動B時, setResult in A3 and finish A3。一旦A3完成,A2 onActivityResult()將被調用,setResult並完成它。一旦A2完成,A1的onActivityResult將被調用。現在做任何你想做的事情關閉活動的結果。

或者您可以在A的所有小孩活動完成後從A開始B.

+0

這就是點,如果我同時開始新的活動,A2不會立即調用 –

+0

更新了答案 –

+0

將活動結果中的數據傳遞給幾個活動可能有點煩人,但這是正確的方法它。 –

1

一次只能激活一項活動,因此當您完成A3並且啓動B時,現在激活爲A2的B無法被調用。

解決方案將在ActivityAonActivityResult中移至B.

完成所有其他活動並在第一個活動onActivityResult發射B並完成。

如果您使用的API 11以上你可以設置一個標誌,如:

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

當你開始ActivityB。這將完成ActivityB之前的所有活動。

+0

是的,我知道API 8對我來說:( –

+1

所以剛剛在第一項活動中啓動B) –

-2

假設你已經開始活動A1和A1你現在就開始A2,當你想從A2然後啓動A3,

finish(); 
setResult(0); 

然後A1的誕生將調用有檢查

如果 發送resultCode == 0 完成() 然後啓動A3

+0

那會立即關閉A2嗎? –

+0

是A2將會關閉並且在onActivityresult A1中您應該關閉完成A1並開始A3 – Amit

相關問題