如何为单个活动维护startActivityForResult

时间:2019-04-25 05:29:46

标签: android android-activity

我有一个主要的活动场景。

我有三个活动A,B,C

现在我要从A呼叫C

A-> C

在C中,我有onBackPress

使用startActivity作为结果的相同方式

B-> C

所以在我的A和B中,我使用StartActitivity来获取结果并保持在OnActivityForResult中。

活动A

Intent i = new Intent(this, AddNewAddress.class);
i.putExtra("addresstype", addressType);
startActivityForResult(i, 10);

在A的OnActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        // check if the request code is same as what is passed  here it is 2


        switch (requestCode) {

            case (10): {
                // do this if request code is 10.
                addressType=data.getStringExtra("MESSAGE");
                getAddressList(userId,addressType);
                mAdapter.notifyDataSetChanged();
                addrListModels.clear();
            }
            break;


        }

    }

我也在B中做同样的事情。...

现在在C

 @Override
    public void onBackPressed() {
        super.onBackPressed();

        Intent intent=new Intent();
        intent.putExtra("MESSAGE",addresstype);
        setResult(10,intent);
        finish();
    }

崩溃正在发生

  

java.lang.RuntimeException:无法交付结果ResultInfo

3 个答案:

答案 0 :(得分:1)

用C的super.onBackPressed();方法删除onBackPressed,请尝试一下。

答案 1 :(得分:0)

Intent i = new Intent(this, AddNewAddress.class);

            i.putExtra("addresstype", addressType);
            startActivityForResult(i, 10);

    @Override
        public void onBackPressed() {
            super.onBackPressed();

            Intent intent=new Intent();
            intent.putExtra("MESSAGE",addresstype);
            setResult(RESULT_OK,intent);
            finish();
        }

    onActivityResult use RESULT_OK

        @Override
            public void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (resultCode == RESULT_OK) {
                    switch (requestCode) {
                        case 10:
                    }
                }
            }

答案 2 :(得分:0)

@jiajiagu的响应没问题,如果您使用super.onBackPressed,请不要致电finish

但是,就像@ mayur-panchalw试图说的那样,如果您使用startActivityForResult,则不需要返回requestCode。 系统已经知道哪个Activity正在返回。

您需要返回resultCode

ResultCode可以是RESULT_OKRESULT_CANCELED

因此,完成“活动”使用后

    setResult(RESULT_OK, intent);
    finish();

onActivityResult中测试requestCode以确定返回哪个Activity,并resultCode知道结果是否成功。