Подтвердить что ты не робот

Неверный запрос Код возвращается onActivityResult из другого действия

У меня есть Activity, который вызывает другой Activity, который вызывает некоторые другие Activities. Я отправляю последний Activity, чтобы получить результат, а затем отправлю результат в кулак Activity.

Поток выглядит как

A -> B -> C -> D -> C -> B -> A

С потоком от A до D производится startActivityForResult, а поток от D до A выполнен из onActivityResult.

От D до B requestCode всегда один и тот же (тот, который я решил), но от B до A он внезапно меняет свое значение на случайное значение (в данном конкретном случае 196614).

Это код, который я использую для вызова activity B из activity A:

filterByCatalogue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), CatalogueContainerActivity.class);
            startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
        }
    });

filterByCatalogue как FrameLayout)

Это код, который я использую для вызова activity A:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Defines.FILTER_BY_CATALOGUE) {
            if (resultCode == RESULT_OK) {
                Intent intent = new Intent();
                intent.putExtra("article", data.getStringExtra("article"));
                setResult(RESULT_OK, intent);
                finish();
            }
        }
    }

Я много искал, но не могу найти, где я ошибаюсь....

4b9b3361

Ответ 1

Просто замените

startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

с

getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

Это сработает наверняка.:)

Ответ 2

Код запроса не является случайным. При использовании фрагментов библиотеки поддержки v4 индекс фрагмента кодируется в первые 16 бит кода запроса, а ваш код запроса находится в нижних 16 битах. Впоследствии фрагмент-фрагмент используется для поиска правильного фрагмента для доставки результата. Ссылка.

Например, 196614 действительно 3 < 16 + 6, где 3 - индекс фрагмента плюс один и 6 - ваш код запроса.

Мораль: не смешивайте активность/фрагмент startActivityForResult() и onActivityResult(). При запуске из действия обработайте результат в активности. При запуске из фрагмента обработайте результат в фрагменте.