Задание 2:
Создайте приложение из трех классов (Условно: A, B и С).
Из класса А запускаются классы В и С, по завершению своей работы классы В и С возвращают
строку в класс А, которая выводится на экран.
Интерфейс класса А содержит:
- Элемент RadioButton определяющий запускаемый класс (В или С).
- Кнопку которая непосредственно запускает выбранный класс.
- Тектовое поле результатов запука, которая содержит надпись о том
какой класс был ранее вызван и какую строку он возвратил.
Из класса A по нажатию кнопки вызывается класс В или С в зависимости от выбора
RadioButton. Классы В и С каждый имеют тектовое поле для ввода строки (которая будет возварщена
в класс А) и одну кнопку, которая завершает работу данного класса работу
и возвращается в класс А.
Намерение
Класс Intent представляет собой объект обмена сообщениями, с помощью которого можно
запросить выполнение действия у компонента другого приложения.
Несмотря на то, что объекты Intent упрощают обмен данными между компонентами
по нескольким аспектам, в основном они используются для запуска операции:
Компонент Activity представляет собой один экран в приложении. Для запуска нового
экземпляра компонента Activity необходимо передать объект Intent методу startActivity().
Объект Intent описывает операцию, которую требуется запустить, а также содержит все
остальные необходимые данные.
Если после завершения операции от нее требуется получить результат,
вызовите метод startActivityForResult(). Ваша операция получит результат в виде
отдельного объекта Intent в обратном вызове метода onActivityResult() операции.
Для коректного запуска классов В и С необходимо добавить в файл AndroidManifest.xml следующие
разрешения (в раздел Application). Если этого не сделать, то при попытке
вызова указанных классов может сгенерироваться ошибка.
<activity android:name=".B"></activity>
<activity android:name=".C"></activity>
Элементы кода
Запуск и ожидание результата
Intent intent = new Intent(this, B.class);//Создается намерение запустить класс
startActivityForResult(intent, 1);//Намерение отправляется в операционную систему
Здесь "B" - название запускаемого класса, число "1" номер вызова который будет возвращен
в onActivityResult как параметр requestCode. По этому номеру можно будет понять какой класс возвратил ответ.
В основном классе (классе A) нужно добавить обработчик
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {return;} // если намерение не возвратилось, то выходим
String str = data.getStringExtra("MyString");//Извлекаем переданную строку MyString
tvName.setText("Returned string:" + str);//Выводим строку на экран
}
Завершение класса и возврат в вызываемый класс:
Это пишется в классе B и С.
Intent intent = new Intent(); //Создается класс намерения
intent.putExtra("MyString", etName.getText().toString()); //заполняем намерение одной строкой
setResult(RESULT_OK, intent); //добавляем в намерение параметр, означающий успешность окончания работы вызванного класса
finish(); // завершаем работу класса и возвращаемся в дочерний класс