0

我有三个活动:A、B、C。我的申请流程是:A -> B & B->A 或 A -> B & B ->C & C->A。所以我使用 startActivityForResult 将数据从 A 传递到另一个活动,并且在 A 中我也有 onActivityResult 来处理接收到的数据。在 B 中,我更改数据并通过以下方式转到 C:

Intent intent = new Intent(this,C.class);
Bundle bundle = this.getIntent().getExtras();
bundle.putSerializable("newdatafromA", newdatafromA);
intent.putExtras(bundle);
startActivity(intent);

在 C 中,我获取数据并更改某些内容。我尝试使用结果代码 setResult() 并转到 A 但它不成功:

Intent positveActivity = new Intent(getApplicationContext(),A.class);
Bundle bundle = new Bundle();
bundle.putSerializable("newdata", newdata);
bundle.putSerializable("newdatafromA", newdatafromA);
positveActivity.putExtra("data", bundle);
setResult(2, positveActivity);
startActivity(positveActivity);

我调试它并没有跳转到 A.class 中的 onActivityResult(我在此处处理结果代码 = 2)。并且捆绑有所有数据。有什么想法可以帮我解决吗?

4

3 回答 3

3

从您的活动 B。当您要去活动 C 时。然后在您的活动 B 中使用 startActivityForResult。覆盖 onActivityResult 并处理来自活动 C 的数据。然后通过 setResult 将数据传递回活动 A,就像您在活动 C 中所做的那样。所以这个数据将被传递回活动 A

流动:

活动 A --> 活动 B --> 活动 C 然后从活动 C 返回 --> 活动 B 最后返回活动 A

于 2014-11-20T07:32:59.840 回答
0

要回到 OnactivityResult 你不应该创建一个意图然后 startActivity A..

你只需要调用finish(); 方法并会自动返回到 Activity A 并运行 onActivityResult ...

喜欢:在活动 C 中:

Bundle bundle = new Bundle();
bundle.putSerializable("newdata", newdata);
bundle.putSerializable("newdatafromA", newdatafromA);
positveActivity.putExtra("data", bundle);
setResult(2, positveActivity);
finish();

希望能帮助到你 :)

于 2014-11-20T07:38:15.100 回答
0

当您从活动 C 开始活动 A 时,仅开始使用普通方法,但是 -

用作Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP你的旗帜。然后它会按照你想要的方式工作。

 Intent intent = new Intent(C.this,A.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);

来源在这里

于 2014-11-20T07:41:56.793 回答