DialogFragment wyświetlany z onContextItemSelected nie przetrwa onPause / onResume
Mam DialogDragment, który mogę pokazać na dwa sposoby:
1) Dotknięcie elementu ListView z jego OnItemClickListener
2) Aktywując menu kontekstowe ListView i wybierając element menu
Wykonywanie # 1 działa dobrze we wszystkich zdarzeniach cyklu życia, ale jeśli wywołam go za pomocą # 2 i wstrzymam działanie (przechodząc do Home) i wznawiam go za pomocą przełącznika zadań, okno dialogowe nie będzie już wyświetlane. Fragment jest tam, a ja mogę obrócić urządzenie i wyświetlić okno dialogowe.
Eksperymentowałem i jeśli umieściłem pokazywanie DialogFragment w Handler z opóźnieniem co najmniej 1/2 sekundy, to działa.
Poniższy fragment nie powiedzie się - wyświetla okno dialogowe, ale następnie wstrzymuje / wznawia ukrywanie go:
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean consumed = false;
switch (item.getItemId()) {
case R.id.menu_item:
showMyDialogFragment();
consumed = true;
break;
}
return consumed;
}
Tak działa następujący fragment kodu. Wstrzymaj / wznów ponownie wyświetlanie okna dialogowego poprawnie:
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;
}
Zastąpienie drugiego opóźnienia 300ms opóźnieniem 0ms lub 250ms powoduje jego ponowne zerwanie. To powtarzalne w 100% przypadków.
Jest to oczywiście straszny hack, pogarszany przez stałą, która prawdopodobnie zależy od prędkości urządzenia.
Ktoś wie, dlaczego tak się dzieje i / lub oferuje lepsze rozwiązanie? Spędziłem wiele godzin na tym problemie i to jest najlepsze, co mogłem wymyślić.