Ausnahme, wenn man ein EditText in einem Popup laufen auf dem Gerät
Entwickle ich ein PopUp-Fenster für Android, und es funktioniert, ich habe ein EditText und ein Button auf, der beim laufen auf ADV korrekt, beim laufen auf dem Gerät, wenn ich den Fokus auf die EditText dies wirft eine seltsame Ausnahme.
android.view.WindowManager$BadTokenException: Unable to add window - - token android.view.ViewRoot&48163b18 is not valid; is your active running?
Ich weiß nicht, ob es eine Rolle spielt, aber ich bin läuft auf einem Galaxy Tab mit Swype-Eingabe.
Nun lese ich die Spezifikationen des Fensters.showAtLocation
public void showAtLocation (View parent, int gravity, int x, int y)
Display the content view in a popup window at the specified location. If the popup window cannot fit on screen, it will be clipped. [...]
Parameters
parent a parent view to get the getWindowToken() token from
[...]
Das problem ist nur, dass in token, aber wie gebe ich die Aktivität token, um es?
Schrieb ich auch einen kleinen code, den Fehler zu reproduzieren.
PopupWindow window = new PopupWindow(activity);
window.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
window.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
window.setTouchable(true);
window.setFocusable(true);
EditText text = new EditText(activity);
text.setText("Dont touch, this crash!");
window.setContentView(text);
window.showAtLocation(arg0, Gravity.NO_GRAVITY, 10,10);
Läuft auf AVD alles Prima funktioniert, während auf dem Gerät stürzt dieses ab und werfen Sie die Fehler, die ich erwähnt.
Entdecke ich etwas neues, wenn ich im landscape-Modus dieser Fehler nicht Auftritt.
- Dies kann eine totale Schuss im Dunkeln, aber nach der recherche zu diesem etwas, wie es scheint, dieses problem kann verursacht werden, indem Sie mit Aktivität.getApplicationContext als Kontext. Dieser thread gibt Euch eine Lösung, wenn dies tatsächlich Ihr problem. groups.google.com/group/android-developers/browse_thread/thread/...
- Ich versuchte sogar mit einer Menge von Kontexten (von der Taste, von der Tätigkeit, Anwendung) der gleiche Fehler auf allen.
- Vasconcelos ,ich habe das gleiche problem mit Ihnen ,und es scheint nicht der code ,sondern das Gerät den Absturz verursachen. und ich habe einige ausprobiert samsumg android-tab und Telefon ,die meisten von Ihnen zum Absturz. Ich will wissen, ob Sie dieses problem gelöst haben. oder was sollten wir tun.
- hast du eine Lösung gefunden für dein problem? Ich habe eine ähnliche (versuchen, fügen Sie ein Untermenü in einem popup-Fenster-Menü), außer es scheitert auch am emulator... finde keine Lösung überall, ich wäre daran interessiert zu wissen, ob du es gelöst hast
- ich habe dasselbe problem, aber in meinem Fall edittext ist in webview, haben Sie keine Lösung gefunden
- Ich habe das gleiche problem, aber es scheint zu sein, gelegentlich. @kosiara - Bartosz Kosarzycki Antwort mein problem gelöst
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke, TheRedPill!
Ich hatte das gleiche problem mit EditText innerhalb des Popup-Fensters verhält stragely. Es arbeitete auf dem Samsung Galaxy S3, HTC One X, stürzte aber auf Huawei MediaPad angekündigt FHD 10. Sobald ich mit der Bearbeitung begonnen, die Anwendung ist abgestürzt.
Ihre Lösung:
Löste das Problem für mich.
Den stack-trace wurde:
Die Ursache:
Ich nachvollziehen, die Ursache des Fehlers unten, um die Schreibweise auto-das richtige Verhalten auf einigen Handys (Moto Droid Razr und einige weitere Moto-Handys) und einige android Rom (wie einige CM7 und CM7.1 ROMS). Wenn der text enthält ein Wort, das ist falsch buchstabiert, und der text-cursor schwebt in oder in der Nähe des Textes, die android OS werden versuchen, automatisch die Tastatur, und versuchen, Anregungen, die auf eine korrekte Rechtschreibung.
Auf den meisten Geräten, die eine automatische Korrektur Kummerkasten erscheinen nur als eine Zeile segment oberhalb der Tastatur. Doch auf einigen custom ROMs (CM7 als eine, die ich scheinen eine Menge passiert), und einige Geräte (Droid Razr), gibt es eine zusätzliche drop-down-Auswahl-box, die erscheint :
Sehen diese Bild, was die auto-Korrektur-popup sieht aus wie (sorry, nicht genug rep Bild einfügen)
Ich stark vermuten, dass das auto die richtige drop-down-Liste ist auch implementiert, so erscheint ein popup-Fenster, und es wird versucht, die aktuelle popup (mit der EditText mit der mis-spell-word) wie der root-Ansicht, und zu versuchen, die windowToken von der root-Ansicht.
Da das popup-Fenster selbst ist nicht eine traditionelle Sichtweise, ich gehe davon aus, dass es nicht in der Lage ist, die richtige windowToken zu anderen Ansichten, die für Sie Fragen, also zu dem Fehler führen.
Die Lösungen:
1) Der einfachste Weg, ich war in der Lage, dieses problem zu umgehen, ist die Verwendung Dialog anstelle von Popup-Fenstern. Ihre API ist wirklich ähnlich, und meine Fälle sind relativ leicht zu ersetzen "PopupWindow" über den Dialog.
Beispiel:
Alter code:
Neuen code:
2) Der zweite Ansatz ist schwieriger, aber vielleicht geeigneter, wenn Popup-Dialog-Ersatz ist nicht machbar, ist die Benutzer-Fragmente in Ort der PopupWindows. Es gibt viele gute fragment tutorials draußen, so dass ich nicht die Mühe, zu gehen über, wie dies in diesem Beitrag.
3) Als letztes Mittel, wie mehrere Poster oben erwähnt, können Sie turn-off text automatisch richtig auf die EditText Felder innerhalb der PopupWindwow zu side step das problem. Doch diese führen zu schrecklichen Erfahrungen der Nutzer, da viele Benutzer (und-Tastaturen wie swype) setzt auf "automatische Korrektur", dies zu tun wird wahrscheinlich fahren Benutzers entfernt von Ihrer Anwendung.
Hoffe, dies hilft anderen da draußen, die mit diesem problem konfrontiert. Ich schlug meinen Kopf gegen die Tastatur für mehr als einen Tag, bevor Sie schließlich beschlossen, zu versuchen, den Dialog-Ansatz, der zu meiner überraschung war auch Recht einfach zu tauschen. Viel Glück für Sie
Ich versuchte Ihren code, aber alles funktioniert gut für mich... Hier ist das test-Klasse schrieb ich :
main.xml :
Vielleicht haben Sie versucht, führen Sie den popup-code in der onCreate () - Funktion? Wenn ich es mache, wirft es die gleiche Ausnahme wie deins, aber es ist normal da bei onCreate() wird aufgerufen, die Aktivität ist noch nicht vollständig initialisiert.
(Ich habe versucht auf einem Galaxy Tab auch, aber ohne swype-Eingabe)
dies ist eigentlich die Ursache der Ausnahme..
wenn wir binden die EditText zu text es fällt auf klicken Sie auf, wenn die virtuelle Tastatur angezeigt wird..
Aber der gleiche code funktioniert Prima, wenn wir nicht binden Sie das EditText
Obwohl ich bin mit dem gleichen Fehler, und nicht in der Lage zu Sortieren, bis jetzt....
Nur darum, die Bemühungen hier, um den Fokus auf problem Herstellerin Linie...
Kann jeder Körper schlagen, warum itz verhält, wie und wie dieses Problem zu beheben..
Thankx
Ich habe auch den gleichen Fehler, wenn die edittext in meinem Popup-hatte einige text bereits vorhanden ist, und der text war nicht ein Wort aus dem Wörterbuch (z.B. der name einer Stadt). Wenn ich auf in zwischen dem text und boom! Ich bekam die Ausnahme.
Ich löste es, indem Sie die edittext nicht zeigen AutoKorrektur-Vorschläge:
Bearbeitet
versuchen, wie das erstellen einer neuen Klasse sagen Popupcls
Nun in Ihrer Tätigkeit, wenn Sie brauchen, popup, wenn die popup-Schaltfläche, klicken Sie auf schreiben, wie diese
Ich hoffe, das hilft
Der Absturz tritt auf, auf einem EditText platziert in der WindowManager, wenn der Benutzer tippt auf ein Wort Unterstrichen rot. So ein unterstrichenes Wort bedeutet, dass es nicht existieren im Wörterbuch. Auf die Tippen, OS versucht zu zeigen, bis ein pop-mit besten passenden Wörter aus dem Wörterbuch und stürzt ab, da eine solche pop-up kann nicht angebracht werden, um die Fenster wegen schlechten token Ausnahme.
Nur die folgende Lösung schien für mich arbeiten programmgesteuert