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

OnActivityResult не работает?

Я столкнулся с проблемой, связанной с startActivityForResult()

Чтобы запустить SecondActivity из FirstActivity:

Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
intent.putExtra("key1", "12345");
startActivityForResult(intent, 0);

И обрабатывает результат:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //TODO handle here. 
}

Чтобы отправить сообщение FirstActivity из SecondActivity:

в SecondActivity:

setResult(0);

Я не могу обработать результат onActivityResult в FirstActivity. Он никогда не работает для моего приложения.

Моя ОС: 1.5

Что здесь не так?

4b9b3361

Ответ 1

startActivityForResult предназначен для ситуаций, когда вы хотите выбрать часть данных или выполнить какое-либо действие, которое не может выполнить ваш Activity или приложение.

Например, вы хотите выбрать контакт, поэтому вы запускаете приложение контактов, пользователь выбирает человека, которого они хотят, и вы получаете сообщение. Или вы хотите сделать снимок, так что вы запустите приложение камеры и попросите его отправить вам фотографию после ее завершения. Это действие полностью отделено от вашего первого действия, которое вызывает startActivityForResult.

Запустив Activity, вы не отправите результат, пока не завершится Activity, т.е. finish().

Итак, в вашем случае вам нужно вызвать это в SecondActivity:

setResult(...);
finish();

до FirstActivity получит результат в своем методе onActivityResult. Разумеется, это означает, что SecondActivity теперь ушел, а FirstActivity снова стал вершиной стека.


Невозможно отправить результат на FirstActivity, затем закройте его, сохраняя при этом SecondActivity все еще активным. В этом случае вы должны просто обрабатывать все, что этот "результат" находится в SecondActivity, или отправить его на Service, который вы определяете, чтобы выполнять любую необходимую обработку.

Ответ 2

Я застрял здесь некоторое время. Добавьте мою проблему здесь, чтобы убедиться, что вы тоже не поцарапаете голову.

Второй параметр этой функции должен быть 0 или выше.

startActivityForResult(intent, 0); // <- this is OK

Я установил второй параметр RESULT_OK, который равен -1, и мой обратный вызов onActivityResult никогда не вызывался. Поэтому, если вы застряли, как я, вы также можете проверить правильность вашего второго параметра.

startActivityForResult(intent, RESULT_OK); // <- this is wrong

Вышеуказанная строка не сможет вызвать onActivityResult.

Ответ 3

Я тоже застрял в одной и той же проблеме - но по другой причине как matangs. По-видимому, startActivityForResult работает, только если для основной активности (в манифесте) установлено android:launchMode для standard. Надеюсь, это поможет кому-то.

Ответ 4

Ваш код выглядит нормально, но прекратите ли вы свою вторую активность?

Попробуйте в нем:

setResult(0);
finish();

Ответ 5

Если вы выполняете действия onPause (например, отключаете службу), попробуйте прокомментировать его и посмотреть, вызвана ли onActivityResult (я потратил несколько часов на это..)

Ответ 6

Благодаря @johndodo (это указывает на явное) - я нахожу свое решение для той же проблемы.

удаление android:noHistory=true в явном "решении этой проблемы для меня.