Ich erhalte die folgende Android-Ausnahme, wenn ich versuche, einen Dialog zu öffnen. Kann mir bitte jemand helfen zu verstehen, was los ist und wie ich dieses Problem beheben kann?
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)
Antworten:
Ich vermute - versuchen Sie, einen Dialog mit einem Anwendungskontext zu erstellen? Etwas wie das:
Das ist falsch. Sie müssen einen Aktivitätskontext verwenden.
Sie müssen versuchen wie:
quelle
getActivity()
@SagarDevangaSie können weiterhin verwenden
getApplicationContext()
, aber vor der Verwendung sollten Sie dieses Flag hinzufügen:dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
und der Fehler wird nicht angezeigt.Und vergessen Sie nicht, die Erlaubnis hinzuzufügen:
quelle
In meinem Fall habe ich versucht, meinen Dialog folgendermaßen zu erstellen:
Also musste ich mich ändern für:
Und es funktioniert gut für mich;)
quelle
MyActivity.class
anstelle von "this
weilthis
" auf ein anderes Objekt verweisen.this
wird sicherstellen , dass IhrDialog
erbt Ihr Thema.Versuchen Sie es
getParent()
an der Argumentationsstelle voncontext
wienew AlertDialog.Builder(getParent());
Hope, es wird funktionieren, es hat bei mir funktioniert.quelle
this.parent.getActivity().getApplicationContext()
,this.parent.getActivity()
aber den Trick gemacht.Ich vermute - versuchen Sie, Dialog mit zu erstellen.
Wenn Sie im Dialogfeld keine Aktivitätsklasse anzeigen, müssen Sie die Aktivität als Parameter übergeben.
Jetzt wird es großartig funktionieren.
Wenn Sie Probleme haben, lassen Sie es mich wissen.
quelle
Ich habe es damit im Kontextfeld versucht:
und es funktioniert gut für mich. Dies war aus einer Klasse, die sich von "Fragment" erstreckt:
quelle
Hallo, wenn Sie einen Adapter verwenden, besteht möglicherweise eine Chance.
Alles, was Sie wissen müssen, wenn Sie einen Dialog in Adapter, getContext (), Kontext oder Aktivität verwendet haben, wird irgendwann nicht mehr funktionieren.
Hier ist der Trick, den ich verwendet habe,
v.getRootView().getContext()
wobei v das Ansichtsobjekt ist, auf das Sie verweisen.Z.B.
quelle
Ich habe die gleiche Ausnahme. Um dies zu beheben, übergebe ich die Instanz des Dialogs als Parameter an die Funktion und verwende sie, anstatt nur den Kontext zu übergeben, und verwende dann getContext (). Diese Lösung löst mein Problem, hoffe es kann helfen
quelle
Ich habe diese Ausnahme erhalten, als ich versucht habe, den Fortschrittsdialog unter dem Cordova-Plugin zu öffnen, indem ich die folgenden zwei Fälle verwendet habe:
neuer ProgressDialog (this.cordova.getActivity (). getParent ());
neuer ProgressDialog (this.cordova.getActivity (). getApplicationContext ());
Später so geändert,
neuer ProgressDialog (this.cordova.getActivity ());
Es funktioniert gut für mich.
quelle
Verwenden Sie dies und der Kontext hat bei mir nicht funktioniert. Aber MyActivityName. Dies hat funktioniert. Hoffe das hilft jedem, der es braucht.
quelle
Ich habe diesen Fehler behoben, indem ich unten die Benutzerberechtigung in AndroidManifest.xml hinzugefügt habe
Dialogfeld "Warnung initialisieren" mit Aktivitätsname:
Weitere Informationen finden Sie unter ==> So erstellen Sie einen Warnungsdialog in Android
quelle