2012-02-06

AlertDialogについてのメモ

AlertDialog.Builderのshow()を使って表示すると画面の回転で消えてしまう
ので、ちょっと調べてみたらActivityのonCreateDialogをOverrideして
表示するのが基本のようで、これだと画面が回転しても消えない

で、やってみたのですがDialogを継承してonCreateをOverrideして
AlertDialog.Builderのcreateやshowを呼び出しておいても表示されない

なのでMyDialogてクラスがあるとしてその中に

public class MyDialog extends Dialog { 
    private Context context;    //フィールド

  //コンストラクタ
    public MyDialog(final Context context) {
         //Dialogを継承しているので必要
    super(context);
        this.context = context;
    }

    //これをActivityのonCreateDialogで呼び出す
    public Dialog createAlertDialog() {
        //まずはAlartDialog.Builderの生成
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        //必要なことをする
       return builder.create();
    }
}

って感じのメソッドを作ってActivityのonCreateDialogで

    protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
         switch (id) {
         case 0:
             MyDialog myDialog = new MyDialog(this);
             dialog = myDialog.createAlertDialog();
      break;
         //なんか他にもあったらその処理
         }
    return dialog;
    }

で、必要な所でshowDialog(0);をよんでやればOK

他にうまいやり方があるのかもしれないけど、とりあえずこれで妥協

レイアウトを自作したダイアログならDialogのonCreateをOverrideして
そのなかでsetContentViewやらなんやらしてやればいいんだけど
その辺はここが参考になりました
http://androidr.sblo.jp/article/44022821.html

あと、AlertDialogを別ファイルにしないならここが参考になりました
 http://beefsalt.blog79.fc2.com/blog-entry-23.html
それとここも参考になりました
http://www.techdoctranslator.com/android/guide/ui/dialogs

ちなみに、SimpleGmapshのダイアログ3個の内レイアウトまるまる自作は1個だけ
気が向いたら全部レイアウト自作に切り替えようかなぁ