2012-04-07 3 views
0

Ich bin neu in Android und Java. Meine App muss überprüfen können, was der Benutzer während der Eingabe eingibt. Wenn der Benutzer ein vorbestimmtes Wort eingibt, das markiert wurde, muss ein Ereignis auftreten, bevor der Benutzer eine Schaltfläche drückt. Es scheint, als wäre die beste Wahl hierfür ein TextWatcher und ein addChangedTextListener. Ich konnte nicht herausfinden, wie man eine Folge von Zeichen (ein Wort) überprüfen kann. Zum Beispiel, wenn das markierte Wort "sehr" war, wenn der Benutzer "Es ist sehr warm" eingibt. im edittext sollte das Programm erkennen können, dass "sehr" getippt wurde und den Benutzer in irgendeiner Weise warnen.Wie verwende ich TextWatcher, um nach einer bestimmten Zeichenkette statt nur einem Zeichen zu suchen?

Ich hoffe, ich konnte dies ohne Verwendung von Code deutlich machen. Jede Hilfe, die gegeben werden könnte, würde sehr geschätzt werden.

Antwort

1

Dies ist die einfachste Form, die sie über TextWatcher tun:

String word = "very"; 

TextWatcher watcher = new TextWatcher() { 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    } 

    public void afterTextChanged(Editable s) { 
     String tmp = s.toString().trim().toLowerCase(); 
     if(tmp.contains(word.toLowerCase())){ 
      //inform the user here 
     } 
    } 
}; 
+0

Danke. Es funktioniert perfekt! – ghodnett

+0

Also, gibt es eine Möglichkeit, diesen Code zu ändern, um mehrere markierte Wörter gleichzeitig zu überprüfen? Mein Problem ist jetzt, ich werde eine unbekannte Anzahl von markierten Wörtern haben, möglicherweise in einer Hashmap gespeichert, und muss in der Lage sein zu sagen, ob der Benutzer eines dieser Wörter verwendet. – ghodnett

+0

Ja, verwenden Sie eine Schleife innerhalb ** afterTextChanged **, um es für mehrere Wörter zu tun – waqaslam

0

Ich werde einfach ein Beispiel zeigen:

String word = "very"; 
int wordProgress = 0; 

charTyped(char c) { 
    if (c == word.charAt(wordProgress)) { 
     wordProgress++; 
     if (wordProgress >= word.length()) { 
      AlertUserThatFlagWordWasTypedAndUseObjectiveCTypeMethodNamingSyntaxJustForFunBecauseIAmUsingObjectiveCAndIFindItQuiteAnoying(word); 
     } 
    } 
} 

Dies kann nicht der beste Weg, es zu tun, aber es ist die schnellste und effizienteste. Wenn Sie auch nach Caret-Positionsänderungen und Backspaces suchen, müssen Sie dies ändern.

Eine viel einfachere Version, die auch mit Backspaces und Caret-Bewegungen funktionieren würde, aber viel weniger effizient wäre, zu überprüfen, ob der gesamte Textbereich das Wort jedes Mal enthielt, wenn der Benutzer etwas eintippte.

+0

Danke. Brauche ich also überhaupt keinen TextWatcher oder sollte das hineingehen? – ghodnett

+0

Ich habe noch nie TextWatcher verwendet, aber ich rate aus Ihrer Beschreibung Sie hätten eine ähnliche Methode wie charTyped (char c). Diese Methode wird jedes Mal aufgerufen, wenn ein Zeichen eingegeben wird. –