So ändern Sie TextView Text auf DataChange, ohne TextWatcher Listener zurückzurufen

8
%Vor%

Wenn wir ein TextWatcher zu einem TextView hinzufügen, und ich möchte an diesen TextView einen Buchstaben anhängen, jedes Mal wenn der Benutzer einen Buchstaben darin schreibt, aber dies ruft den TextWatcher wieder auf Listener, so weiter zu StackOverFlow error , also wie man einen Text anhängt, ohne den TextWatcher Listener erneut aufzurufen?

    
Mohammad Ersan 15.06.2011, 08:10
quelle

4 Antworten

4

Die Dokumentation von afterTextChanged sagt:

Diese Methode wird aufgerufen, um Sie darauf hinzuweisen, dass der Text innerhalb von s geändert wurde. Es ist legitim, weitere Änderungen an s durch diesen Rückruf vorzunehmen, , aber achten Sie darauf, sich nicht in eine Endlosschleife zu begeben, da alle von Ihnen vorgenommenen Änderungen dazu führen, dass diese Methode rekursiv erneut aufgerufen wird . (Sie erfahren nicht, wo die Änderung stattfand, da andere afterTextChanged () -Methoden möglicherweise bereits andere Änderungen vorgenommen und die Offsets ungültig gemacht haben. Wenn Sie dies jedoch wissen müssen, können Sie setSpan(Object, int, int, int) in onTextChanged(CharSequence, int, int, int) verwenden, um Ihren Platz zu markieren dann schau von hier auf, wo die Spannweite endete.

Also, mit jedem s.append("A") hast du call afterTextChanged() wieder und so weiter.

    
iDroid 15.06.2011, 09:27
quelle
29

Es ist einfach:

%Vor%     
Andrii Chernenko 08.06.2013 23:59
quelle
6

Eine weitere Möglichkeit, stackoverflow zu vermeiden:

%Vor%     
Iurii 04.03.2015 21:38
quelle
-1

Kotlin-Version

%Vor%     
Kavin Varnan 01.11.2017 07:39
quelle

Tags und Links