アラートダイアログ表示で困ったこと
きっかけ
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つしか表示されない。はず....
まだ、初心者なのでとにかく忘れないように覚書しましたが、おかしなところがあればそっと教えてください...よろしくお願いします。
参考にしたサイト
Author And Source
この問題について(アラートダイアログ表示で困ったこと), 我々は、より多くの情報をここで見つけました https://qiita.com/HisakoIsaka/items/5623ae31da467c4b2d87著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .