Диалоговое окно предупреждения отображается, но не отображается

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

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

Спасибо!


person Finuka    schedule 28.07.2011    source источник
comment
stackoverflow .com/questions/13928591/ У меня тоже такая же проблема, помогите...   -  person Amit    schedule 18.12.2012


Ответы (3)


Самый простой способ исправить это — отслеживать время жизни диалога в действии и выполнять 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;
}

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

person Matt Giger    schedule 20.10.2011

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

person Shailendra Singh Rajawat    schedule 28.07.2011
comment
Спасибо за ответ. Я попробовал то, что вы сказали. Да, диалог нельзя отменить, но даже если метод show вызывается в onResume, он не виден на экране. - person Finuka; 28.07.2011

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

person Simon Fröhlich    schedule 19.03.2017