android: how do I check if dialogfragment is showing
I launch my dialog fragment using
FragmentTransaction ft =
getFragmentManager().beginTransaction();
MyDialogFragment dialog = new MyDialogFragment()
dialog.show(ft, "dialog");
then to get a handle on it I do
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
but once I get prev
, how do I check if it is showing?
Back Story
My problem is that my looping code keeps launching the dialog again and again. But if the dialog is already showing, I don't want it to launch again. This back story is just for context. The answer I seek is not: "move it out of the loop."
Solution 1:
if (dialogFragment != null
&& dialogFragment.getDialog() != null
&& dialogFragment.getDialog().isShowing()
&& !dialogFragment.isRemoving()) {
//dialog is showing so do something
} else {
//dialog is not showing
}
UPDATE: team can you also try the below call, i think it will work logically:
dialogFragment.isResumed
that should mean its in the foreground displaying if im not mistaken.
Solution 2:
I added this to be inside my custom dialog fragment, so I don't have to worry about any logic on the outside. Override the show()
and onDismiss()
methods, with a boolean shown
field:
private static boolean shown = false;
@Override
public void show(FragmentManager manager, String tag) {
if (shown) return;
super.show(manager, tag);
shown = true;
}
@Override
public void onDismiss(DialogInterface dialog) {
shown = false;
super.onDismiss(dialog);
}
If you want to check whether it is shown or not, you can create a getter for the shown
boolean.