1

假设我有 3 个活动。

  • 第一的
  • 第二
  • 结果。

First 和 Second 都调用 Result 活动startActivityForResult()。在结果中,根据调用活动,我想返回不同的结果。

有什么方法可以决定哪个调用了 Result Activity 并将结果返回给该活动。

4

3 回答 3

6

您可以使用找到调用活动getCallingActivity ()

于 2013-06-01T07:54:49.033 回答
1

您不能同时在顶部进行多项活动。您是否要让它们一个接一个地按顺序运行?

实现此目的的一种方法是启动每个活动以获得结果:

Intent intent = new Intent(this, MyActivity.class);
startActivityForResult(intent, 0);

您在哪里使用请求代码来跟踪活动何时运行。然后,在 onActivityResult 你可以开始下一个:

protected void  onActivityResult  (int requestCode, int resultCode, Intent  data) {
  if (requestCode < NUM_ACTIVITIES) {
    Intent intent = new Intent(this, MyActivity.class);
    startActivityForResult(intent, requestCode + 1);
  }
}

如果你想让一些活动立即在后台运行,你可以通过在每个活动的 onCreate 中调用 startActivity 将它们链接在一起。如果在创建任何视图之前在 onCreate 中启动一个新 Activity,则该 Activity 将永远不可见。

protected void  onCreate  (Bundle savedInstanceState) {
  int numLeft = getIntent().getIntExtra("numLeft");
  if (numLeft > 0) {
    Intent intent = new Intent(this, MyActivity.class);
    intent.putExtra("numLeft", numLeft - 1);
    startActivity(intent);
  }
}
于 2013-06-01T07:57:12.363 回答
0

在您调用活动时,使用 setresult 完成活动

Intent in = new Intent();
setResult(100, in);
finish();

在你的第一个活动中

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    Log.i(Tag, "Result: " + Integer.toString(resultCode));

    if (resultCode == 200) {
            Log.i(Tag, "second");           
    } else if (resultCode == 100) {
            Log.i(Tag, "activity");
    } 
}   
于 2013-06-01T08:00:36.417 回答