在我的应用程序的某些部分,有一个这样的活动结构:
Activity A
是我的家庭活动,我会在每个流程或流程后回来
Activity B
是一项简单的确认活动
Activity C
是另一项确认活动
Activity D
做了一些处理,最后将结果返回到我的家庭活动(Activity A
)。
Activity B
和C
:
finish()
并且什么也不做。finish()
我正在考虑使用startActivityForResult()
,但我从未使用它来通过多个活动传递结果。
我还想传递一个handler
(在Activity A
中创建),在Activity A
上调用某个方法并在Activity D
上执行...
我怎么能实现呢?
答案 0 :(得分:60)
您可能希望在启动活动B和C时使用意图标志 FLAG_ACTIVITY_FORWARD_RESULT ,如Intent
中所述
public static final int FLAG_ACTIVITY_FORWARD_RESULT
自:API Level 1
如果设置并且此意图用于从现有活动启动新活动,则现有活动的回复目标将转移到新活动。这样,新活动就可以调用
setResult(int)
并将结果发送回原始活动的回复目标。
这样A应该收到从D
发回的额外内容中发回的任何数据答案 1 :(得分:10)
是的,格式很棒。你可以 - 而且可能应该 - 肯定从活动A,B和C中调用startActivityForResult()
(并且不要立即finish()
。在B和C中,您可以检查成功的结果和finish()
,将结果传回A。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if((resultCode == RESULT_OK) && (requestCode == MY_RESULT_CODE)) {
setResult(RESULT_OK, data);
finish();
}
}
如果您希望B和C消失,请执行以下操作:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
setResult(resultCode, data);
finish();
}
答案 2 :(得分:0)
我知道这是一个非常古老的问题,但我想提出一个有效的解决方案,使用onNewIntent()
并将其视为onActivityResult()
。
在活动D中,您可以将您的意图构建为
Intent intent = new Intent(yourContext, Activity_A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("someName", data);
startActivity(intent);
finish();
然后在Activity_A
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// update your UI
intent.getSerializableExtra(...
}
答案 3 :(得分:-1)
您可以将B和C作为从A触发的对话框进行操作,并且只有在B和C正常时,才能使用startActivityForResult()
运行D