2012-10-24 21 views
5

Mam działanie i muszę wyświetlić okno dialogowe. Wszystko działa dobrze tutaj. Mam overrided onCreateDialog metody aktywności, oto kod:Po ponownym utworzeniu aktywności w Androidzie pojawia się okno dialogowe.

Gdzie CreateWaitDialog jest metoda zwyczaj tworzenia okna i waitDialog jest statyczny zmienna.

Jestem pokazując okno poprzez wywołanie ShowDialog (10)

Cały kod jest wykonywany w porządku.

Po wyświetleniu okna dialogowego zamykam je, dzwoniąc.

if(waitDialog != null) 
    waitDialog.hide(); 

I odrzucam to, gdy Aktywność jest zniszczona.

if(dialogCreated) 
     dismissDialog(10); 
    super.onDestroy(); 

Zamyka się i wszystko jest świetnie. ALE, gdy zmieniam orientację mojego urządzenia i Aktywność jest odtwarzana, wyskakuje sam! Nie dzwonię do żadnego showDialoga czy coś takiego, tylko się pojawi!

Odpowiedz

8

myślę, że to jest zdefiniowane zachowanie aktywności i onCreateDialog:

oddzwaniania do tworzenia okien dialogowych, które są zarządzane (zapisane i przywrócone) dla Ciebie przez działalność. Domyślna implementacja wywołuje metodę onCreateDialog (int) w celu zapewnienia zgodności. Jeśli kierujesz reklamy na HONEYCOMB lub nowszy, zamiast tego rozważ użycie zamiast tego funkcji DialogFragment.

Jeśli użyjesz funkcji showDialog (int), działanie będzie wywoływać tę metodę po raz pierwszy i będzie się na niej zawieszać. Każde okno dialogowe utworzone za pomocą tej metody zostanie automatycznie zapisane i przywrócone, w tym wyświetlanie.

Jeśli chcesz, aby aktywność zarządzała zapisywaniem i odtwarzaniem okien dialogowych, powinieneś zastąpić tę metodę i obsłużyć wszystkie identyfikatory, które są przekazywane do showDialog (int).

Będę zgadywać, że naDestroy jest zbyt późno w cyklu życia aktywności, aby zamknąć okno dialogowe. Domyślam się, że Activity zapisuje twoje okno dialogowe na stronie SaveSstanceState.

Mogę spróbować odrzucić okno dialogowe na stronie SaveSstanceState przed wywołaniem super.onSaveInstanceState, wtedy okno dialogowe zostanie odrzucone zanim Android spróbuje zapisać i przywrócić go.

@Override 
onSaveInstanceState(Bundle outstate) { 

    dismissDialog(10); 
    super.onSaveInstanceState(outstate); 
} 
+1

Nienawidzę konkurujących odpowiedzi, ponieważ poświęciłeś dodatkowy czas, aby zacytować dokumentację, usunąłem odpowiedź i dałem ci wiadomość. – Sam

+0

@Sam Myślę, że twoja odpowiedź wciąż ma wartość, zostawiłbym to.Prawdopodobnie powinien nazywać odwołanie zamiast hide, moją odpowiedzią jest jedynie domysły/hack, aby obejść domyślne zachowanie onCreateDialog. Myślę, że twoje jest prawdopodobnie lepszym rozwiązaniem. – Tim

+0

Po prostu dwukrotnie sprawdziłem kod źródłowy i jeśli okno dialogowe jest wyświetlane wielokrotnie, użycie 'hide()' jest szybszym podejściem. Również twoja odpowiedź mogła być domysłem, ale jest dobrze uzasadniona i poprawna. Tak więc cieszę się, że mogę opuścić mój program. – Sam

1

Zadzwoń do Activity.removeDialog (int id), jeśli chcesz, aby aplikacja nie kontynuowała zapisywania i przywracania okna dialogowego.

4

Znalazłem się z podobnym problemem, który wystąpił, ponieważ przeważyłem naDismiss() bez wywoływania super.onDismiss(). Jeśli znajdziesz się w oknach dialogowych, które pojawią się ponownie po odtworzeniu działania, możesz sprawdzić, czy nie popełniłeś tego samego błędu.

Powiązane problemy