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
Что здесь не так?
Ответы
Ответ 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
в явном "решении этой проблемы для меня.