読者です 読者をやめる 読者になる 読者になる

A Day In The Life

とあるプログラマの備忘録

モーダルダイアログなら呼び出し元の処理を止めてくれ。

Androidのダイアログ、見た目上の動きはモーダルです。しかしプログラムではDialog#showメソッドを呼んだ後の処理がとまらず流れてしまいます。

例えばアクティビティにて以下のようなプログラムがあった場合

Dialog dialog = new Dialog(this);
dialog.setTitle("hoge");
dialog.show();
:
後続処理

showメソッド呼び出し以降の処理がダイアログ表示後すぐに流れてしまうのです。普通モーダルならダイアログがクローズされるまで呼び出し元の処理は流れないはずです。

↓こんな感じ。

ActivityとDialogの処理1

でも実際は以下のようになっているようです。

完全にモーダレスな動きだと思うのですが...。

ActivityとDialogの処理2

ダイアログを使わずサブアクティビティにすればonActivityResultイベントで同期がとれるのでサブアクティビティを使うという手もありますが、見た目ダイアログでプログラム上アクティビティとなるのはなんとも違和感があります。

う〜ん微妙...。

#アクティビティ図はあくまで処理イメージですので突っ込みは勘弁してください。