android:我如何检查dialogfragment是否显示

我使用启动我的对话框片段

FragmentTransaction ft = getFragmentManager().beginTransaction(); MyDialogFragment dialog = new MyDialogFragment() dialog.show(ft, "dialog"); 

然后去处理它我做的

 Fragment prev = getFragmentManager().findFragmentByTag("dialog"); 

但是一旦我得到了prev ,我该如何检查它是否显示?

背后的故事

我的问题是,我的循环代码不断启动一次又一次的对话框。 但如果对话已经显示,我不希望它再次启动。 这个背后的故事只是为了上下文。 我所寻求的答案不是:“把它从循环中移出来”。

Solutions Collecting From Web of "android:我如何检查dialogfragment是否显示"

只需检查它是否为空

 if(prev == null) //There is no active fragment with tag "dialog" else //There is an active fragment with tag "dialog" and "prev" variable holds a reference to it. 

或者,您可以检查片段prev当前与之相关联的活动,但是,请确保确认它不为null 之后再询问是否会得到NullPointerException。 喜欢这个:

 if(prev == null) //There is no active fragment with tag "dialog" else if(prev.getActivity() != this) //additional check //There is a fragment with tag "dialog", but it is not active (shown) which means it was found on device's back stack. else //There is an active fragment with tag "dialog" 
 if(dialogFragment!=null && dialogFragment.getDialog()!=null && dialogFragment.getDialog().isShowing()) { //dialog is showing so do something } else { //dialog is not showing } 

我把这个添加到我的自定义对话框片段中,所以我不必担心外部的任何逻辑。 用boolean shown字段覆盖show()onDismiss()方法:

  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); } 

如果你想检查是否显示,你可以为shown布尔值创build一个getter。