Piszę plik do pobrania obsługi programu. Podczas tego działania pobierania uruchamiam pasek postępu, a następnie uruchamiam wątek, aby wykonać pobieranie. Ten wątek wysyła wiadomość do wątku interfejsu użytkownika, aby powiadomić, ile razy zostało pobranych. W wątku głównym (UI) aktualizuję wyświetlanie paska postępu po otrzymaniu wiadomości. Jeśli podczas pobierania wystąpi jakiś problem, wyśle kolejną wiadomość. Gdy wątek główny otrzyma wiadomość, zatrzymuje pasek postępu i wyświetla nowe okno dialogowe AlertDialog, aby pokazać przyczynę błędu.
Oto specjalny test na to. Podczas pobierania przełącz program na ustawienia. Wyłącz WIFI/GPRS, aby wyłączyć sieć.
Kiedy wracam do mojego programu, powinien wyświetlić interfejs użytkownika w tle i wyskakujące okienko AlertDialog, aby pokazać powód, jak sobie życzę. Ale wyświetla tylko interfejs użytkownika w tle (co oznacza główną aktywność) i z półświetlnym podświetleniem, podobnie jak wyskakujące okienka. Kiedy naciskam z powrotem po raz pierwszy, nic się nie dzieje, poza tym, że podświetlenie jest jasne, tak jak zamykam wyskakujące okienko.
Myślę, że może to dlatego, że kiedy uruchamiam AlertDialog, moja aktywność nie jest na pierwszym planie.
Próbowałem użyć:
ActivityManager am = (ActivityManager)Update.this.getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
By ocenić, czy najważniejsza aktywność jest moja. Ale chcę pokazać okno dialogowe. Jeśli aktywność nie jest widoczna dla użytkownika, po powrocie do mojej aktywności chcę, aby wyświetlało się okno dialogowe.
2 odpowiedzi
Rzeczywiście okno dialogowe zostało już pokazane, ale nie jest widoczne dla użytkownika i stanie się widoczne po obróceniu urządzenia.
Wyglądało na to, że wystąpił problem z odświeżaniem/rysowaniem, jeśli zamkniesz okno dialogowe postępu i natychmiast pokażesz inne nowe okno dialogowe, gdy aktywność nie jest na pierwszym planie. Podczas moich testów taki problem nie występuje, jeśli poczekaj na zakończenie akcji odrzucania dla okna dialogowego postępu, a następnie pokaż nowe okno dialogowe.
Tak więc jedno rozwiązanie polega na tym, że najpierw wyświetla się AlertDialog, a następnie odrzuca ProgressDialog. To zadziałało dla mojej aplikacji.
Myślę, że w Dialog
jest jakiś król błędów. Mam taką samą sytuację i jedynym rozwiązaniem było odrzucenie bieżącego okna dialogowego przez dialogDismiss(id)
i ponowne wyświetlenie go przez showDialog(id)
.
Podobne pytania
Powiązane pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.