Не знаю, как изящно решить следующую задачу:
- У меня есть несколько блоков кода (операции) для выполнения.
- Каждый блок может возвращать
true
из false
, чтобы указать, что возможно дальнейшее выполнение.
- Внутри каждого блока я должен использовать асинхронные вызовы методов (потому что Android полностью асинхронный).
Пример операций обработки (теперь не работает должным образом):
List<Operation> operations = command.getOperations();
for (Operation operation : operations) {
Log.d(TAG, "Processing operation: " + operation);
OperationResult result = operation.execute(activity);
Log.d(TAG, "Operation result is: " + result);
if (!result.canContinue()) {
break;
}
}
Проблема в том, что внутри операции мне нужно, например, отобразить AlertDialog и дождаться ввода. Но после того, как я вызываю dialog.show()
, мой метод execute
завершается и возвращает неверный результат.
Пример кнопки прослушивания, зарегистрированной в AlertDialog, приведен ниже:
final OperationResult result = new OperationResult();
final class ButtonListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int id) {
switch (id) {
case DialogInterface.BUTTON_POSITIVE: {
result.setCanContinue(true);
}
case DialogInterface.BUTTON_NEGATIVE: {
dialog.cancel();
result.setCanContinue(false);
}
}
}
Как изменить обработку операций для поддержки асинхронной модели Android?