Как вернуть результат с помощью нескольких действий
в какой-то части моего приложения существует такая структура:
![enter image description here]()
Activity A
- моя домашняя деятельность, где я возвращаюсь после каждого процесса или потока.
Activity B
- простая операция подтверждения.
Activity C
- еще одна операция подтверждения.
Activity D
выполняет некоторый процесс и, наконец, возвращает результат моей домашней активности (Activity A
).
Требования:
Activity B
и C
:
- должен быть там и не может быть объединен в один.
- когда нажимается кнопка отмены, она вызывает
finish()
и ничего не делает.
- когда он нажимается на кнопку OK, он следует за потоком, а текущие вызовы активности
finish()
Вопрос:
Я думал об использовании startActivityForResult()
, но я никогда не использовал его для передачи результата через несколько действий.
Я также думал передать handler
(созданный в Activity A
), который вызывает некоторый метод на Activity A
и выполняется на Activity D
...
Как я могу реализовать его?
Ответы
Ответ 1
Возможно, вы захотите использовать флаг намерения FLAG_ACTIVITY_FORWARD_RESULT, как описано в Intent
при запуске действий B и C
public static final int FLAG_ACTIVITY_FORWARD_RESULT
Поскольку: Уровень API 1
Если установлено, и это намерение используется для запуска нового действия из существующего, тогда цель ответа существующего действия будет перенесена в новое действие. Таким образом, новая активность может вызывать setResult(int)
и вернуть этот результат обратно к цели ответа исходной активности.
Таким образом, A должен получать любые данные, отправленные обратно в экстрасети, отправленные с D
Ответ 2
Yup, отличное форматирование. И вы можете - и, вероятно, должны - определенно позвонить startActivityForResult()
из каждой из Деяний А, В и С (и не сразу finish()
). В B и C вы можете проверить успешный результат и finish()
, передав результат на A.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if((resultCode == RESULT_OK) && (requestCode == MY_RESULT_CODE)) {
setResult(RESULT_OK, data);
finish();
}
}
Если вы хотите, чтобы B и C исчезли независимо, сделайте следующее:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
setResult(resultCode, data);
finish();
}
Ответ 3
Вы можете делать B и C как диалоги, которые запускаются из A, и только если B и C в порядке, вы запускаете D с помощью startActivityForResult()