Es stellte sich heraus, dass die obige Verwendung von InputConnectionWrapper
völlig korrekt war. % Co_de% wird jedoch nie aufgerufen (außer für Spezialfälle), da es andere Methoden gibt, die während der Eingabe verwendet werden. Dies sind hauptsächlich commitText()
und setComposingText()
.
Es ist jedoch auch wichtig, selten verwendete Methoden wie sendKeyEvent()
oder deleteSurroundingText()
zu überschreiben, um sicherzustellen, dass alle Benutzereingaben erfasst werden, da ich auf ein ähnliches Problem gestoßen bin.
Meine Situation: Ich habe eine commitText()
Ansicht, in die der Benutzer hineintippt. Der EditText
wird gelöscht, wenn der Benutzer eine Schaltfläche drückt. Viele inaktive EditText
-Einträge strömen aus, wenn ich den Knopf schnell drücke.
z. InputConnection
Die letzte Zeile in meinem Logcat oben gibt einen guten Hinweis darauf, was passiert. Tatsächlich ist das editText.setText(null);
mit Anfragen zum Löschen des Textes überfordert. Ich habe versucht, den Code zu ändern, um nach der Textlänge zu suchen, bevor ich versuche, ihn zu löschen:
Dies hilft, das Problem zu mindern, indem das schnelle Drücken der Taste nicht mehr den Stream von InputConnection
warnungen verursacht. Dies führt jedoch immer noch zu Problemen, wenn der Benutzer schnell zwischen Tippen und Drücken der Taste wechselt oder die Taste drückt, wenn die App ausreichend ausgelastet ist.
Glücklicherweise habe ich eine andere Möglichkeit gefunden, den Text zu löschen: IInputConnectionWrapper
. Damit bekomme ich keine Warnungen:
Beachten Sie, dass Sie, wenn Sie alle Eingabezustände und nicht nur den Text löschen möchten (Autotext, Autocap, Multitap, Rückgängig), Editable.clear()
verwenden können.
Wenn Sie mehr über den Eingangsverbindungs-Wrapper wissen möchten, besuchen Sie bitte den folgenden Link.