DialogFragment exibido de onContextItemSelected não sobrevive emPause / onResume
Eu tenho um DialogDragment que eu posso mostrar de duas maneiras:
1) Ao tocar em um item ListView do seu OnItemClickListener
2) Ativando o menu de contexto do ListView e selecionando um item de menu
Fazer # 1 funciona bem em todos os eventos do ciclo de vida, mas se eu invoco-lo via # 2 e pausar a atividade (indo para Home) e a retomada através do alternador de tarefas, a caixa de diálogo não é mais exibida. O fragmento está lá e eu posso girar o dispositivo e mostrar o diálogo.
Eu experimentei, e se eu colocar a exibição do DialogFragment em um manipulador com um atraso de pelo menos 1/2 segundos, ele funciona.
O trecho a seguir falha - mostra a caixa de diálogo, mas, em seguida, pausar / retomar 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;
}
Então, o seguinte trecho funciona. Pausar / continuar exibir a caixa de diálogo novamente corretamente:
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;
}
Substituir o atraso de 300 ms por um atraso de 0ms ou 250ms faz com que ele seja quebrado novamente. Isso pode ser repetido 100% do tempo.
Este é um truque terrível, obviamente, agravado pela constante que provavelmente depende da velocidade do dispositivo.
Alguém sabe por que isso está acontecendo e / ou oferece uma solução melhor? Eu passei horas sobre esta questão e isso é o melhor que eu poderia fazer.