StartActivityForResult回去了

时间:2017-08-20 14:45:14

标签: java android android-intent startactivityforresult

我正在使用 StartActivityForResult 进行多项活动。我的主要活动是初始化它。在我的第二个活动中,我输入了一些值并传递给第三个活动。现在,当我正在进行第三项活动时,如果我想编辑我传递的值,我希望能够返回第二项活动。我该怎么办?

MainAct.java

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE)
    {
        if (resultCode == Activity.RESULT_OK)
        {
            //Something
        }
    }

SecondAct.java

 Intent vd2 = new Intent(ViolatorDetails1.this,ViolatorDetails2.class);
                vd2.putExtra("name",name);
                vd2.putExtra("lname",lname);
                vd2.putExtra("lnumber",lnumber);
                vd2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                vd2.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                startActivity(vd2);
                finish();

ThirdAct.java

 Intent intent = new Intent();
            intent.putExtra("firstname",name);
            intent.putExtra("lastname", lname);
            intent.putExtra("licensenumber", lnumber);
            setResult(Activity.RESULT_OK, intent);
            finish();

如果有的话,如何从第三个活动返回第二个活动来编辑某些值?

2 个答案:

答案 0 :(得分:0)

启动第三个活动时,不应该在第二个活动上调用finish()。

然后在第三个活动结束时调用onActivityResult()。

呼叫

startActivityForResult(vd2);

而不是

startActivity(vd2);

答案 1 :(得分:0)

只需删除finish();

即可
 Intent vd2 = new Intent(ViolatorDetails1.this,ViolatorDetails2.class);
                vd2.putExtra("name",name);
                vd2.putExtra("lname",lname);
                vd2.putExtra("lnumber",lnumber);
                vd2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                vd2.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                startActivity(vd2);
                finish(); //remove this line

这样当你的第三个活动关闭时,用户将回到第二个活动,你也应该在第二个活动中实施onActivityResult,这样你就可以处理用户想要编辑或已经完成的天气,应该回到第一个活动! (即设置意图的结果来自第一个活动并完成第二个活动!)

这就是我在代码中的意思: 在你的第二个活动中,这样做,

@override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE)
    {
        if (resultCode == Activity.RESULT_OK)
        {
           // user should have done his job on 3rd activity and we should finish the 2nd activity to go back to first activity!
        }else{
          //user still editing!
        }
    }

而不是startActivity(vd2);执行startActivityForResult(vd2);