При попытке открыть диалоговое окно я получаю следующее исключение для Android. Может кто-нибудь, пожалуйста, помогите мне понять, что происходит и как я могу решить эту проблему?
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
Ответы:
Я догадываюсь - вы пытаетесь создать диалог с контекстом приложения? Что-то вроде этого:
Это не верно. Вам нужно использовать контекст деятельности.
Вы должны попробовать, как:
источник
getActivity()
@SagarDevangaВы можете продолжать использовать
getApplicationContext()
, но перед использованием вы должны добавить этот флаг:,dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
и ошибка не будет отображаться.И не забудьте добавить разрешение:
источник
В моем случае я пытался создать свой диалог следующим образом:
Поэтому мне пришлось поменять на:
И это прекрасно работает для меня;)
источник
MyActivity.class
вместоthis
потому, чтоthis
относится к другому объекту.this
убедитесь, что вашаDialog
наследует вашу тему.Попробуйте
getParent()
в месте ссорыcontext
типаnew AlertDialog.Builder(getParent());
Надеюсь, что это сработает, у меня сработало.источник
this.parent.getActivity().getApplicationContext()
ноthis.parent.getActivity()
сделал свое дело.Я догадываюсь - вы пытаетесь создать диалог с помощью.
если вы выводите диалоговое окно, не относящееся к классу активности, то вы должны передать активность в качестве параметра.
Теперь это будет отлично работать.
Если вы обнаружите какие-либо проблемы, дайте мне знать.
источник
Я попытался с этим в поле контекста:
и это прекрасно работает для меня. Это было из класса, который происходит от "Фрагмент":
источник
Здравствуйте, если вы используете адаптер, может быть шанс.
Все, что вам нужно знать, когда вы используете какой-либо диалог в адаптере, getContext (), контекст или действие, не будет работать когда-нибудь.
Вот трюк, который я использовал,
v.getRootView().getContext()
где v - это объект представления, на который вы ссылаетесь.Например.
источник
Я получил то же исключение. Чтобы исправить это, я должен передать экземпляр диалога в качестве параметра в функцию и использовать его вместо передачи только контекста, а затем с помощью getContext (). это решение решит мою проблему, надеюсь, оно поможет
источник
Я получил это исключение, когда попытался открыть диалог прогресса в плагине Cordova, используя следующие два случая:
новый ProgressDialog (this.cordova.getActivity (). getParent ());
новый ProgressDialog (this.cordova.getActivity (). getApplicationContext ());
Позже изменился, как это,
новый ProgressDialog (this.cordova.getActivity ());
Это работает нормально для меня.
источник
Используйте это, и контекст не работал для меня .. но MyActivityName.this работал. Надеюсь, это поможет всем, кто в этом нуждается.
источник
Я решил эту ошибку, добавив ниже разрешение пользователя в AndroidManifest.xml
Кроме того, диалоговое окно «Инициализация оповещения» с именем действия:
Для получения более подробной информации, посетите ==> Как создать Alert Dialog в Android
источник