AlertDialog невидим, когда активность возвращается на передний план - PullRequest
6 голосов
/ 10 июня 2011

Я пишу файл поддержки загрузки программы. Во время этой загрузки я запускаю индикатор выполнения, а затем запускаю поток, чтобы выполнить загрузку. Этот поток отправляет сообщение в поток пользовательского интерфейса, чтобы уведомить, сколько было загружено часто. В основном потоке пользовательского интерфейса я обновляю индикатор выполнения при получении сообщения. Если в процессе загрузки возникнут какие-либо проблемы, будет отправлено другое сообщение. Когда основной поток получает сообщение, он останавливает индикатор выполнения и открывает новый AlertDialog, чтобы показать причину ошибки.

Вот специальный тест для него. При загрузке переключите программу в настройки. Выключите WIFI / GPRS, чтобы отключить сеть.

Когда я возвращаюсь к своей программе, она должна отображать фоновый интерфейс и всплывающее окно AlertDialog, чтобы показать причину, как я хочу. Но он отображает только фоновый интерфейс (что означает основное действие) и с полусветом подсветки, так же как всплывающие окна все еще там. Когда я нажимаю назад в первый раз, ничего не происходит, за исключением того, что подсветка яркая, как будто я закрываю всплывающее окно.

Я думаю, может быть, это потому, что когда я запускаю AlertDialog, моя деятельность не на переднем плане.

Я пытался использовать:

ActivityManager am = (ActivityManager)Update.this.getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;

чтобы судить, является ли мой главный вид деятельности. Но я хочу показать диалог. Если пользователь не видит активность, когда он возвращается к моей активности, я хочу, чтобы он отобразил диалоговое окно.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Действительно, диалоговое окно уже показано, но невидимо для пользователя, и оно станет видимым, если вы поверните устройство.

Возникла проблема обновления / рисования, если закрыть диалоговое окно прогресса и сразу же показать другое новое диалоговое окно, когдадеятельность не на переднем плане.Во время моего тестирования такой проблемы не возникало, если дождаться завершения действия dismiss для диалогового окна хода выполнения, а затем показать новое диалоговое окно.

Таким образом, одно из решений - сначала показать AlertDialog, а затем закрыть ProgressDialog.Это сработало для моего приложения.

0 голосов
/ 24 августа 2012

Я думаю, в Dialog есть какой-то король жуков. У меня такая же ситуация, и единственное решение было закрыть текущий диалог dialogDismiss(id) и показать его снова showDialog(id).

...