open from ejemplo activity android android-layout android-fragments android-dialogfragment

from - android: cómo reviso si está mostrando el fragmento de diálogo



dialogfragment kotlin (3)

Lanzo mi fragmento de diálogo usando

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

entonces para manejarlo lo hago

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

pero una vez que obtengo el prev , ¿cómo puedo verificar si se muestra?

Back Story

Mi problema es que mi código de bucle sigue iniciando el diálogo una y otra vez. Pero si el diálogo ya se está mostrando, no quiero que se inicie nuevamente. Esta historia de fondo es solo para el contexto. La respuesta que busco no es: "moverlo fuera del circuito".


Agregué esto para estar dentro de mi fragmento de diálogo personalizado, por lo que no tengo que preocuparme por ninguna lógica en el exterior. onDismiss() métodos show() y onDismiss() , con un campo boolean shown :

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

Si desea verificar si se muestra o no, puede crear un getter para el booleano shown .


simplemente verifica si es nulo

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.

Alternativamente, puede verificar la actividad con la que está asociado el fragmento prev , sin embargo, asegúrese de preguntar después de asegurarse de que no sea nulo o de que obtenga una NullPointerException. Me gusta esto:

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 }