startActivityForResult有三个活动

时间:2013-12-04 22:41:37

标签: java android android-intent android-activity

我有三个活动,我们只称它们为活动A,活动B和活动C

起初我在活动A,我正在使用startActivityForResult启动QR扫描程序(活动B),如下所示:

Intent i;
i = new Intent(this, QrActivity.class);
startActivityForResult(i, 1);

活动B打开后,这是处理结果并返回上一个活动的代码:

 public void handleDecode(Result rawResult, Bitmap barcode) 
{

    if (rawResult != null) {
        String textResult = rawResult.getText();

        if (textResult != null) {
            Intent returnIntent = new Intent();
            returnIntent.putExtra("result", textResult);
            setResult(RESULT_OK,returnIntent);     
            finish();       
        }
//rest of the code

现在这完全正常,一旦活动A再次打开,一切都按预期工作。它是这样的:A - > B - >甲

当我尝试这样做时出现问题:A - > C - > B - >甲

用户有两个选项,要么从活动A启动活动B(qr扫描程序),要么从活动C启动。即使用户从活动C访问活动B,我总是希望用活动A处理活动B结果。 / p>

一旦我从活动C打开活动B(qr扫描仪),这就是我尝试解决它的方式:

当调用Activity B时,我在Activity C上调用了finish():

Intent in;
in = new Intent(this, QrActivity.class);
startActivityForResult(in, 1);
finish();

在活动B中,而不是

Intent returnIntent = new Intent();

我将意图设为:

Intent returnIntent = new Intent(QrActivity.this, CheckpointsActivity.class);

在它返回活动之后A没有任何反应,就像活动B从未打开过一样,当活动B从活动C开始时,似乎没有得到结果。

任何形式的帮助将不胜感激!我知道这一切都非常令人困惑,但如果你愿意,我可以添加更多细节。

1 个答案:

答案 0 :(得分:1)

这不是startActivityForResult()的工作方式。最好在SharedPreferences或其他地方保存数据。

你也可以使用startActivityForResult()从A开始ActivityC然后从C开始做B(还没有完成C),传回你要传递给A的结果那就像

A - > C - > B(完成) - > C(完成) - >甲

使用startActivityForResult()启动C和B,并将setResult()的结果返回到C和A的onActivityResult()