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

Как вернуть результат с помощью нескольких действий

в какой-то части моего приложения существует такая структура:

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...

Как я могу реализовать его?

4b9b3361

Ответ 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()