我有一个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/

10-10 02:05