2011-06-06 68 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

相关问题