2012-04-07 8 views
0

私はAndroidとJavaの両方が新しいです。私のアプリは、ユーザーが入力中に何を入力しているのかを確認する必要があります。ユーザがフラグが付けられた所定の単語を入力すると、ユーザがボタンを押す前にイベントが発生する必要がある。これにはTextWatcherとaddChangedTextListenerが最適です。私はそれが文字のシーケンス(単語)をチェックする方法を理解することができませんでした。たとえば、フラグが付けられた単語が「非常に」だった場合、ユーザーが「非常に暖かい」と入力したとき。 edittextでは、プログラムは「非常に」入力されたことを認識して何らかの方法でユーザーに警告する必要があります。TextWatcherを使用して、1文字ではなく特定の文字列を確認するにはどうすればよいですか?

コードを使用せずにこれを明確にすることができたらと思います。何か助けてもらえれば幸いです。

答えて

1

これはTextWatcherを経由して、それを行うための最も単純な形式である:

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

ありがとうございます。それは完全に動作します! – ghodnett

+0

それで、このコードを修正して、複数のフラグ付き単語を一度に確認する方法はありますか?私の問題は今、ハッシュマップに格納されている可能性のあるフラグ付きの単語が不明確になり、ユーザーがこれらの単語を使用しているかどうかを知る必要があります。 – ghodnett

+0

はい、複数の単語に対して** afterTextChanged **の内部でループを使用します – waqaslam

0

私は単に例を示します:

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

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

これはそれを行うための最善の方法ではないかもしれないが、それは最速かつ最も効率的です。キャレット位置の変更とバックスペースも探している場合は、これを変更する必要があります。

バックスペースとキャレットムーブメントでも動作するはるかに単純なバージョンですが、効率が大幅に低下する場合があります。ユーザーが何か入力するたびにテキストエリア全体に単語が含まれているかどうかを確認することです。

+0

ありがとうございました。だから、私はTextWatcherをまったく必要としないのですか、それともその中に入るべきですか? – ghodnett

+0

私はTextWatcherを一度も使用していませんが、私はあなたの記述から、charTyped(char c)と同様のメソッドを持つと推測しています。このメソッドは、文字が入力されるたびに呼び出されます。 –

関連する問題