Диалог оповещения показан, но не виден - PullRequest
2 голосов
/ 28 июля 2011

У меня есть действие, когда я запускаю встроенную камеру с помощью onActivityResult. Сделав снимок, я возвращаюсь к своему приложению и показываю всплывающее окно, спрашивающее пользователя, хочет ли он сделать больше снимков или нет. Он работает нормально, но после съемки изображения, когда я нажимаю кнопку «Сохранить» во встроенном приложении камеры и сразу же нажимаю кнопку «Домой», если я возвращаюсь к своему приложению, моя активность видна, но не активна и всплывающее окно должно быть видно, но я не вижу его. Если я нажимаю кнопку «Назад» и отменяю всплывающее окно, моя активность снова активна, но я не хочу, чтобы пользователь отменял всплывающее окно, поэтому, когда происходит такое поведение, я не могу использовать свое приложение, мне просто нужно убить его. ..

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

Спасибо!

Ответы [ 3 ]

3 голосов
/ 21 октября 2011

Самый простой способ, который я нашел, чтобы это исправить, - отслеживать время существования диалога в упражнении и делать hide() / show() в onResume для занятия.Это решение работает только для одного Dialog за один раз, но его можно легко адаптировать к большему количеству при необходимости.

1) Сделайте ваше занятие выполненным Dialog.OnDismissListener.2) Добавить переменную экземпляра для текущего Dialog в вашем Activity:

private Dialog currentDialog = null;

3) В onResume() добавить:

if(currentDialog != null) {
    currentDialog.hide();
    currentDialog.show();
}

4) Для каждого созданного диалогав onCreateDialog(), добавьте:

dialog.setOnDismissListener(this);
currentDialog = dialog;

5) Наконец, добавьте:

@Override
public void onDismiss(DialogInterface dialog) {
    if(dialog == currentDialog)
        currentDialog = null;
}

Это, кажется, исправит это для меня.

1 голос
/ 28 июля 2011

Кажется, ваш диалог можно отменить. Попробуйте dialog.setCanceleabe(false) и onResume dialog.show() (чтобы убедиться, что оно будет видно после возобновления активности).

0 голосов
/ 19 марта 2017

Старый вопрос, я знаю, но вы должны добавить заголовок: если макет не имеет высоты или ширины, его можно уменьшить до 0 * 0 -> Невидимый

...