AlertDialog.setMessage の罠

例えば、メッセージ毎に AlertDialog を生成するのは無駄なので、prepare で適宜メッセージを差し替える、というようなコードを書くことがあると思います。

private Dialog createAlertDialog() {
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.PositiveButton(android.R.string.ok, null);
  return builder.create();
}

private void prepareAlertDialog(AlertDialog dialog, CharSequence message) {
  dialog.setMessage(message);
}

これだと message は表示されません。ドッヒャー!

理由は簡単で、この二行ですね。

http://www.google.com/codesearch#uX1GffpyOZk/core/java/com/android/internal/app/AlertController.java&q=file:(/%7C%5E)com/android/internal/app/AlertController%5C.java$&exact_package=git://android.git.kernel.org/platform/frameworks/base.git&is_navigation=1&l=457

なので何かダミーの文字列をセットしておくと良いみたいです。

private Dialog createAlertDialog() {
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setMessage("")
         .PositiveButton(android.R.string.ok, null);
  return builder.create();
}

正直酷いと思う。