我有一个Android编程问题。使用下面的代码,我想验证字符串匹配。它验证得很好,但logcat显示,textwatcher方法每次击键都会触发两次,我不知道为什么。我希望每次击键只触发一次。
你知道它为什么这么做吗?
我想这可能是因为我改变了文本的颜色,但在评论之后,没有什么不同。
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");
}
});
}
最佳答案
因为您的问题是对于textwatcher,每个按键的方法都会触发两次。
您已使用textwather在edittext上监视验证字符串和设置颜色。
您可以在这里的开发人员站点中引用文本观察程序的文档。http://developer.android.com/reference/android/text/TextWatcher.html。
当您按keystore时,它将按textwatcher methodonTextChanged
调用的方式在edit text文本中进行更改,当您按edittext methodbeforeTextChanged
的任何键时,当我们开始编辑edittext时,这将调用。
还有一件事,当你在edittext中输入一个字符时,它将调用Textwather
的所有这三种方法,只是调用的顺序是不同的,而且还重新定义这个问题Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
所以在edittext中两次调用文本更改是没有问题的。
希望你能理解。
关于android - Android TextWatcher射击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9952907/