2014/09/08

[android]ProgressDialogのsetMessage()は、なんでresidがないんだろう?

純粋な疑問だ。

NFCのタグを待っている間、くるくるを出そうと思った。
サンプルを見ると、setTitle()やsetMessage()に文字列を設定している。
まあ、サンプルだからそういうもんだよな、とR.string.fooみたいなのを設定すると、setTitle()はいけるのに、setMessage()はエラーになった。

そういう実装なんだから、仕方ないと言えば仕方ないんだけど、なんでだろう?
show()なんかも、ことごとくCharSequenceを引数に取ってるし。
そういえば、AndroidはいつからかBuilderで作るようになってたな、と思い出した。

 

ProgressDialog.Builder builder = new ProgressDialog.Builder(this);

こんな感じでやっていくと、setMessage()もresidを受け付ける。
よしよし、と、最後にcreate()でProgressDialogにキャストし、SPINNERの設定をさせた。
さて、実行!

・・・キャストできません、と落ちた。
キャスト失敗って動的な例外なんだ、という感想はさておき、なんでだめなんだろう?
ProgressDialogはAlertDialogの派生だから、キャストしても悪くなさそうなのに。
(だから静的にはエラーが出てないんだろうけど。)

使いたければ使えばいいし、カスタマイズするなら自分でやればいいじゃないの、というスタンスなんだろうか・・・。