Как сохранить startActivityForResult для одного действия - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть один сценарий для основных действий ...

У меня есть три действия A, B, C

Теперь я звоню C из A

A--> C

и в CI есть onBackPress

Таким же образом, используя startActivity для результата

B -> C

Так что в моих A и BI я используюStartActitivity для результата и ведения в OnActivityForResult ..

Активность A

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

И в OnActivityResult из A

@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 ]

1 голос
/ 25 апреля 2019

Удалить super.onBackPressed(); в методе C's onBackPressed, пожалуйста, попробуйте.

0 голосов
/ 25 апреля 2019

@ ответ jiajiagu в порядке, не звоните super.onBackPressed, если вы используете finish.

Однако, как пытается сказать @ mayur-panchal, если вы используете startActivityForResult, вам не нужно возвращать requestCode. Система уже знает, какой Activity возвращается.

Вам необходимо вернуть resultCode.

ResultCode может быть RESULT_OK или RESULT_CANCELED.

Итак, при завершении занятия используйте

    setResult(RESULT_OK, intent);
    finish();

В onActivityResult test requestCode, чтобы определить, какие Activity возвращаются, и resultCode, чтобы узнать, был ли результат успешным.

0 голосов
/ 25 апреля 2019
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:
                    }
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...