startActivityForResult用于三个活动

时间:2014-11-20 07:28:00

标签: android android-intent pass-data

我有三个活动:A,B,C。我的申请流程是:A - > B& B-> A或A-> B& B - > C& C->一种。 所以我使用startActivityForResult将数据从A传递到另一个活动,在A i中也有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)。和bundle拥有所有数据。 有什么想法可以帮我解决吗?

3 个答案:

答案 0 :(得分:3)

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

流速:

活动A - >活动B - >活动C. 然后从活动C回来 - >活动B,最后回到活动A

答案 1 :(得分:0)

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

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

喜欢: 在活动C中:



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




希望有所帮助:)

答案 2 :(得分: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);

Source here