Android プログラミングについて質問があります。以下のコードを使用して、文字列の一致を検証します。正常に検証されますが、LogCat は TextWatcher メソッドがキーストロークごとに 2 回起動していることを示しており、その理由がわかりません。キーストロークごとに1回だけ発火したいと思います。
なぜこれをしているのか知っていますか?
テキストの色を変更したためだと思いましたが、コメントアウトしても違いはありませんでした。
LogCat 出力
03-31 03:37:25.269: I/BeforeText(676): Hit
03-31 03:37:25.269: I/OnText(676): Hit
03-31 03:37:25.269: I/AfterText(676): Hit
03-31 03:37:25.274: I/InvalidText(676): Incorrect Text.
03-31 03:37:25.274: I/Text Value(676): a
03-31 03:37:25.404: I/BeforeText(676): Hit
03-31 03:37:25.404: I/OnText(676): Hit
03-31 03:37:25.404: I/AfterText(676): Hit
03-31 03:37:25.404: I/InvalidText(676): Incorrect Text.
03-31 03:37:25.404: I/Text Value(676): a
活動コード
public void onCreate(Bundle savedInstanceState) {
//...omitted
//Create Answer Field
textField = (EditText)this.findViewById(R.id.textField);
//Add validation to TextField
textField.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s){
Log.i("AfterText","Hit");
if(textField.getText().toString().trim().equalsIgnoreCase("hello")){
Log.i("ValidText", "Text matched.");
answerField.setTextColor(Color.GREEN);
}
else{
Log.i("InvalidText", "Incorrect text.");
Log.i("Text Value", textField.getText().toString());
textField.setTextColor(Color.RED);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){
//Do nothing
Log.i("BeforeText", "Hit");
}
public void onTextChanged(CharSequence s, int start, int before, int count){
//Do nothing
Log.i("OnText","Hit");
}
});
}