DialogFragment mostrado desde onContextItemSelected no sobrevive en Pausa / onResume
Tengo un DialogDragment que puedo mostrar de dos maneras:
1) Al tocar un elemento de ListView desde su OnItemClickListener
2) Activando el menú contextual de ListView y seleccionando un elemento del menú
Hacer # 1 funciona bien en todos los eventos del ciclo de vida, pero si lo invoco a través del # 2 y hago una pausa en la actividad (yendo a Inicio) y la reanudé a través del conmutador de tareas, ya no se muestra el diálogo. El fragmento está ahí, y puedo rotar el dispositivo y mostrar el diálogo.
Experimenté, y si pongo la presentación del DialogFragment en un Handler con un retraso de al menos 1/2 segundos, funciona.
El siguiente fragmento de código falla: muestra el cuadro de diálogo, pero luego la pausa / reanudación lo oculta:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
showMyDialogFragment();
consumed = true;
break;
}
return consumed;
}
Así funciona el siguiente fragmento de código. Pausa / reanudar muestra el diálogo de nuevo correctamente:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
new Handler().postDelayed(new Runnable() {
public void run() {
showMyDialogFragment();
}
}, 300);
consumed = true;
break;
}
return consumed;
}
Reemplazar el retardo de 300 ms de segundo con un retardo de 0 ms o 250 ms hace que se vuelva a interrumpir. Esta repetible el 100% del tiempo.
Obviamente, este es un terrible pirateo, empeorado por la constante que probablemente depende de la velocidad del dispositivo.
¿Alguien sabe por qué sucede esto y / u ofrece una mejor solución? Pasé horas en este tema y esto es lo mejor que pude encontrar.