2010-11-12 44 views
1

我有一個關於Activity.finish()的問題。Activity.finish()和startActivityForResult()如何相互協作?

在我的Android代碼,有4個活動(Çd)。開始活動A致電startActivityForResult(intent, reqCode)開始活動BB開始C,然後finish(),不等待結果。 C確實與B完全相同,開始D然後finish()D將返回一些結果,由setResult(resultCode)

當我的代碼運行和活動d返回了一些成績,一個將捉對onActivityResult()一個RESULT_CANCELED,即使RESULT_OKd返回。我猜RESULT_CANCELED來自活動B,它已經在D之前被終止而不是從D返回結果。

不過,我的問題是,爲什麼活動一個RESULT_CANCELEDd返回一些結果,而不是終止後立即?而且,我應該怎麼做A捕獲結果來自D?我必須保留BC活着,要通過結果從DA

+2

是的,你將不得不保持B和C活着。一旦他們收到結果並傳遞給他們,你可以完成()他們。例如,您可以在完成C後收到D的結果並將其傳遞給B.希望它有助於:) – 2010-11-12 08:30:52

+0

謝謝。讓B和C保持活力真的對我有用,但它也帶來更多代碼來處理結果傳遞。 A是否可以直接從D接收?另一個問題是,爲什麼活動A在D返回一些結果後捕獲RESULT_CANCELED?如果A從B得到結果,我猜應該在B完成後立即得到結果。 – MaratSafinWang 2010-11-15 00:58:02

回答

3

從你的解釋,我明白了活動一個開始開始Çç開始d

開始℃後調用finish()Ç也做了同樣的。

由於已被一個開始,它將從在等待結果,一個一直沒有聯繫到d,沒關係,即使d返回一些結果。

如果你想獲得RESULT_OK一個onActivityResult(),你將不得不從得到有效的結果。 對於您必須接收在Çd的結果然後將它傳遞到然後從它傳遞給

您可以傳遞結果返回到各自的調用活動,通過意向後,用ConActivityResult()調用finish()

我想,我正確理解你的問題。如果它錯了,請原諒我。

+0

感謝您的回覆。請參閱我對Shahab的反饋,並且還有其他兩個問題。 – MaratSafinWang 2010-11-15 01:00:57

0

這可能不太明智, 但爲什麼不要你**set result of B and C to RESULT_OK**依賴於一些情況評估。我希望

1

開始活動ç,旗Intent.FLAG_ACTIVITY_FORWARD_RESULT