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
}