Ответ 1
Просто замените
startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
с
getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
Это сработает наверняка.:)
У меня есть 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();
}
}
}
Я много искал, но не могу найти, где я ошибаюсь....
Просто замените
startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
с
getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
Это сработает наверняка.:)
Код запроса не является случайным. При использовании фрагментов библиотеки поддержки v4 индекс фрагмента кодируется в первые 16 бит кода запроса, а ваш код запроса находится в нижних 16 битах. Впоследствии фрагмент-фрагмент используется для поиска правильного фрагмента для доставки результата. Ссылка.
Например, 196614 действительно 3 < 16 + 6, где 3 - индекс фрагмента плюс один и 6 - ваш код запроса.
Мораль: не смешивайте активность/фрагмент startActivityForResult()
и onActivityResult()
. При запуске из действия обработайте результат в активности. При запуске из фрагмента обработайте результат в фрагменте.