Ich weiß ein bisschen darüber Bescheid, TextWatcher
aber das wird bei jedem Charakter ausgelöst, den Sie eingeben. Ich möchte einen Listener, der ausgelöst wird, wenn der Benutzer die Bearbeitung beendet hat. Ist es möglich? Auch in TextWatcher
bekomme ich eine Instanz von, Editable
aber ich brauche eine Instanz von EditText
. Wie bekomme ich das?
EDIT : Die zweite Frage ist wichtiger. Bitte beantworten Sie das.
android
android-edittext
textwatcher
Zinken
quelle
quelle
Antworten:
Zunächst können Sie sehen, ob der Benutzer die Bearbeitung des Textes abgeschlossen hat, wenn der
EditText
Fokus verloren geht oder ob der Benutzer die Schaltfläche " Fertig" drückt (dies hängt von Ihrer Implementierung ab und davon, was für Sie am besten geeignet ist). Zweitens können Sie keineEditText
Instanz innerhalb derTextWatcher
nur erhalten, wenn Sie dasEditText
als Instanzobjekt deklariert haben . Auch wenn Sie das nichtEditText
innerhalb des bearbeiten sollten,TextWatcher
weil es nicht sicher ist.BEARBEITEN:
Um die
EditText
Instanz in IhreTextWatcher
Implementierung zu integrieren, sollten Sie Folgendes versuchen:Beachten Sie, dass das obige Beispiel möglicherweise einige Fehler enthält, aber ich wollte Ihnen nur ein Beispiel zeigen.
quelle
Es hat mich gestört, dass für die Implementierung eines Listeners für alle meine EditText-Felder hässlicher, ausführlicher Code erforderlich war, sodass ich die folgende Klasse schrieb. Kann für jeden nützlich sein, der darüber stolpert.
Jetzt ist die Implementierung eines Listeners etwas sauberer.
Wie oft es ausgelöst wird, könnte man vielleicht eine Prüfung durchführen, um den gewünschten Code
//Do stuff
nach einem bestimmten a auszuführenquelle
Jeder, der ButterKnife benutzt . Sie können wie folgt verwenden:
quelle
Ich habe es gemacht mit
AutotextView
:quelle
quelle
TextWatcher
hat bei mir nicht funktioniert, da es immer wieder für jeden feuerteEditText
und die Werte des anderen durcheinander brachte.Hier ist meine Lösung:
Mit der
getChildAt(xx)
Methode können Sie also jeden Artikel in der abrufenListView
und den einzelnen Artikel mit abrufenfindViewById
. Und es wird dann den neuesten Wert geben.quelle
Soweit ich darüber nachdenken kann, gibt es nur zwei Möglichkeiten, wie Sie es tun können. Wie können Sie wissen, dass der Benutzer ein Wort fertig geschrieben hat? Entweder bei Fokusverlust oder durch Klicken auf die Schaltfläche "OK". Ich habe keine Möglichkeit zu wissen, dass der Benutzer das letzte Zeichen gedrückt hat ...
Rufen
onFocusChange(View v, boolean hasFocus)
Sie also eine Schaltfläche und einen Klick-Listener an oder fügen Sie sie hinzu.quelle
Die Watcher-Methode wird bei jeder Zeicheneingabe ausgelöst. Also habe ich diesen Code basierend auf der onFocusChange-Methode erstellt:
Um es zu benutzen, rufen Sie einfach so auf:
Sie können die Funktion comS ignorieren, indem Sie! ComS (dat.s, "" + EdTe.getText ()) durch die Funktion! Equal ersetzen. Allerdings funktioniert die Gleichheitsfunktion selbst einige Zeit zur Laufzeit nicht richtig.
Der onChange-Listener merkt sich beim Eingeben des Benutzerfokus alte Daten von EditText und vergleicht die neuen Daten, wenn der Benutzer den Fokus verliert oder zu einer anderen Eingabe springt. Wenn der alte String nicht mit dem neuen String verglichen wird, wird die Arbeit ausgelöst.
Wenn Sie nur 1 EditText haben, müssen Sie eine ClearFocus-Funktion erstellen, indem Sie einen Ultimate Secret Transparent Micro EditText (außerhalb der Fenster) erstellen und den Fokus darauf anfordern. Anschließend können Sie die Tastatur über den Import Method Manager ausblenden.
quelle