2011-06-06 110 views
0

我有一個場景,我有我的主屏幕(ActivityA)開始登錄屏幕(ActivityB)。此登錄屏幕將有一個按鈕,允許非註冊用戶註冊一個帳戶,觸發(ActivityC)。Android startActivityForResult和子活動啓動另一個活動

在我的代碼,我有ActivityA

public class ActivityA extends Activity { 
    ... 
    startActivityForResult(new Intent(this, ActivityB.class), 0); 
    ... 
} 

和ActivityB

public class ActivityB extends Activity { 
... 
startActivity(new Intent(this, ActivityC.class)); 
... 
} 

那麼它似乎工作,但我擔心,如果有任何隱藏的問題都不可能返回後來困擾我?在ActivityB中,如果我啓動ActivityC,則沒有setResult()調用來觸發ActivityA的onActivityResult()。這樣的流程是否有問題,或者我應該使用startActivity而不是startActivityForResult?

回答

3

ActivtyA的onActivityResult方法將在完成時由ActivityB觸發。 ActivityB在其生命週期中做了什麼或者它產生了多少新活動並不重要,當在ActivityB上調用finish()時(希望在調用setResult()之後它將傳播回ActivityA。在您的交流中唯一的缺陷是ActivityC無法說明如果你不需要,你沒事; A和B的溝通仍然沒有改變,

+0

感謝你的回覆,關於你回覆的一些問題1)如果ActivityB沒有甚至打電話完成()? 2)如果ActivityC進入startActivty()並啓動ActivityA,會有什麼問題嗎? – yjw 2011-06-06 19:33:27

+1

ActivityB在返回到ActivityA之前始終會調用finish(),它在生命週期中。如果ActivityC啓動ActivityA,則取決於您如何啓動它。它應該創建一個新的實例,以便您的堆棧看起來像「A B C A」,在這種情況下,從B到A的結果通道仍然可以正常工作。有可能啓動帶有標誌的A將它帶到棧頂,導致「B C A」,這種情況下B的結果可能未被使用。 – LeffelMania 2011-06-06 19:44:18

相關問題