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ć.

questionAnswers(2)

yourAnswerToTheQuestion