通过多个活动传递数据

时间:2014-04-23 20:31:56

标签: android android-activity

1-是我的第一个活动(主要) 2-是我的第二项活动 3 - 是我的第三项活动

我希望从1开始运行2然后运行2运行3,然后从3开始运行数据并将其返回到1.希望你明白的人。

这是我的代码:

Runing 2 form 1 liek this:

            Intent intent = new Intent(getApplicationContext(),MessageBox.class);
             intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
            startActivityForResult(intent,5);               

然后像这样从2运行3:

                Intent intent = new Intent(getApplicationContext(),ImageReceiver.class);

                startActivityForResult(intent,5);

然后在3我有这样的事情:

          setResult(10);
          finish();

所以我在2中设置结果得到这个结果我有:

        if(requestCode==5)
        {
            if(resultCode==10)
            {

                Intent intent = new Intent(getApplicationContext(),MainActivity.class);

                setResult(5,intent);
                finish();
            }
        }

然后在1中我得到了:

     if(requestCode==5)
     {
         if(resultCode==5)
         {
             //here i am taking data from 3
         }
     }

问题是我甚至无法在logcat中打开2个coz:

04-23 22:13:15.579:E / AndroidRuntime(15313):android.util.AndroidRuntimeException:在请求结果时使用FORWARD_RESULT_FLAG

我真的不知道该怎么做。请看这段代码。

2 个答案:

答案 0 :(得分:17)

从1开始2时不能这样做:

Intent intent = new Intent(getApplicationContext(), MessageBox.class);
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivityForResult(intent,5);

这将抛出您获得的异常。您不能同时使用FLAG_ACTIVITY_FORWARD_RESULTstartActivityForResult()

如果你想让1从3获得结果,那么你需要从1开始2:

Intent intent = new Intent(getApplicationContext(), MessageBox.class);
startActivityForResult(intent, 5);

然后像这样从2开始3:

Intent intent = new Intent(getApplicationContext(), ImageReceiver.class);
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);
finish();

这告诉Android,活动3(ImageReceiver)应该将其结果转发回调用活动2(MessageBox)的活动。当活动3设置其结果并结束时,将调用活动1中的onActivityResult(),并从活动3发送结果数据。

答案 1 :(得分:1)

在活动1中注释掉这一行

intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);

和活动2中的这一行

Intent intent = new Intent(getApplicationContext(),MainActivity.class);

你应该全力以赴。