Создаём activity и возвращаем из него результат родителю

By | 24.01.2014

Сегодня попробуем вызвать новое activity с классом SecondActivity, ввести в нём какую-то информацию и получить её в родительском activity, т.е. там, откуда мы вызывали новое activity.

При нажатии на view, т.е. кнопку или ещё что-то срабатывает onClick();. В нём пишем следующее:

// создаём интент и пишем название класса, который будет открывать новое Activity
Intent intent = new Intent(this, SecondActivity.class);
 
// отправляем Activity с созданным интентом и передаём код возврата
startActivityForResult(intent, 1);

Метод startActivityForResult() отличается от startActivity() тем, что Activity с которого мы создаём новое Activity становится родителем и когда новое activity завершится, оно передаст результат выполнения родителю. Этому сопутствует вызов метода onActivityResult() который выполнится при закрытии предыдущего activity.

Теперь работаем уже в номом activity. Вот код:

// создаём интент
Intent intent = new Intent();
// передаём в родительское activity переменную data_var с текстом
intent.putExtra("data_var", "что-то передаём");
// чтобы отправить родителю информацию, передаём ему созданный интент
setResult(RESULT_OK, intent);
// и закрываем активити, что вызовет родителя
finish();

Теперь рассмотрим метод onActivityResult(). Его сигнатура следующая:

protected void onActivityResult(int requestCode, int resultCode, Intent data)

requestCode — это тот самый код, который мы передавали при старте нового активити, в нашем случае это 1.
resultCode — мы закрываем новое активити, при помощи метода setResult и передаём ему RESULT_OK, этот код означает, что вызов активити прошёл успешно
Intent data — ну тут понятно, созвращаем интент в переменную data с данными, чтобы их обработать в родителе

Ну и распишем реализацию данного метода в примере:

// если активити ничего не вернуло, завершаем выполнение метода
if (data == null) {
  return;
}
 
// создаём переменную типа String с названием data_var и передаём в неё соответствующую переменную из интента
String data_var = data.getStringExtra("data_var");
 
// что-то делаем с содержимым этой переменной, например выводим как текст какого-то View элемента
someView.setText(data_var);

Готово. Удачи!