android: how do I check if dialogfragment is showing

后端 未结 4 1574
臣服心动
臣服心动 2020-12-23 19:15

I launch my dialog fragment using

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


        
相关标签:
4条回答
  • 2020-12-23 19:16

    simply check if it's null

    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.
    

    Alternatively, you could check the activity the fragment prev is currently associated with, however, make sure you ask that after you make sure it's not null or you'll get a NullPointerException. Like this:

    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"
    
    0 讨论(0)
  • 2020-12-23 19:21
     if (dialogFragment != null
         && dialogFragment.getDialog() != null
         && dialogFragment.getDialog().isShowing()
         && !dialogFragment.isRemoving()) {
                //dialog is showing so do something 
     } else {
         //dialog is not showing
     }
    
    0 讨论(0)
  • 2020-12-23 19:21

    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.

    0 讨论(0)
  • 2020-12-23 19:33

    Kotlin style:

    private fun showDialog(dialogFragment: DialogFragment, tag: String) {
        supportFragmentManager.findFragmentByTag(tag).let { fragment ->
            fragment ?: let {
                supportFragmentManager.beginTransaction().let { transition ->
                    dialogFragment.show(transition, tag)
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题