ダイアログ

新しい言語やら環境やらに触れるたびにいつも作るものがある。
ボタンをいくつでも表示できるダイアログ。
OKとキャンセルとかならあらかじめ用意されていたりもするが、ボタンを3つ4つ表示しようとすると画面を一から作らなければいけないことが多い。
だもんで、環境に慣れるという意味も含めてそういうモノを作るのだが、Android用を作っていて驚いた。


ダイアログってモーダルじゃないんだね。


モーダルじゃないどころか、showメソッド呼んだってすぐには表示されない。
メソッドを抜けてUIスレッドがアイドル状態になって初めて表示される。
Toastもそうみたいね。
いろいろ調べていて、バックグラウンドスレッドから呼ぶ場合は同期オブジェクトを使って擬似的なモーダルを実現できるみたいだけど、UIスレッドから呼ぶ限りはコード上のタイミングで表示させることはできないようだ。
なるほどねぇ。
AlertDialogでボタンのリスナーを設定するような仕組みになってるのはそういうわけか。
showメソッドでボタンのインデックスでも返すようにすればいいのにとか思っていたのだが。
Androidは端末の縦横が変わった時なんかに画面を作り直すようになってるみたいだけど、ダイアログ表示でスレッドが止まってたらどうにもならないもんな。