アラートダイアログ表示で困ったこと


きっかけ

Androidアプリ開発中にアラートダイアログを表示するためにDialog Fragment を作成してMainのActivityで呼び出そうとした時、エラーが出まくって大パニックになったので覚書しました。

その1:DialogFragmentの2重起動を防止する

データが連想配列(HashMap)などの場合、ある条件のもとでダイアログを表示させるが、1つしか必要ないのに条件に当てはまったデータが複数あればダイアログも複数表示されるので、ダイアログが1つ表示されたらフラグを立てて、「フラグがあれば表示しない」ようにするやり方。
※変数宣言時にfalseを入れておく
boolean noDialog = false;

MyDialogFragment dialog = new MyDialogFragment();
 if(noDialog == false) {
   noDialog = true;
  dialog.show(getSupportFragmentManager(), "dialog");
 }

その2:タイマーで画面を自動更新すると結局2重で表示されてしまう。

タイマーを使って「○秒後に画面を自動更新」などしてしまうと、結局、フラグを立てるだけでは2重起動を防止できないことがわかったのでさらに、findFragmentByTag () で Activity に存在する Fragment を取得してチェックするやり方。
指定したタグがあるかないかをチェックしてなければダイアログを表示、あればreturnする。
DialogFragmentがsupport.v4を使用しているならgetSupportFragmentManager()を使用、そうでなければ、getFragmentManager()を使用する。ここにめっちゃハマった...

if(getSupportFragmentManager().findFragmentByTag("dialog") == null) {
  MyDialogFragment dialog = new MyDialogFragment();
  if (noDialog == false) {
  dialog.show(getSupportFragmentManager(), "dialog");
    noDialog = true;
  } else {
    noDialog = true;
  }
}

これで、データが連想配列(HashMap)でもダイアログは1つしか表示されない。はず....
まだ、初心者なのでとにかく忘れないように覚書しましたが、おかしなところがあればそっと教えてください...よろしくお願いします。

参考にしたサイト

公式サイトDialogFragment
公式サイトFragmentManager
Android memomemo