次のタスクをエレガントに解決する方法がわかりません。
- 実行するコード (操作) のブロックがいくつかあります。
- 各ブロックは、さらなる実行が可能であることを示すために を
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 の非同期モデルをサポートするには、操作の処理をどのように変更すればよいですか?