Android EditText验证只运行一次

Android EditText验证只运行一次,android,validation,android-edittext,Android,Validation,Android Edittext,我有以下验证 private boolean validatePin() { String pin = pinTxt.getText().toString().trim(); if (TextUtils.isEmpty(pin) || pin.length() != 4) { pin_layout.setError(mContext.getString(R.string.err_msg_pin)); requestFocus(pinTxt);

我有以下验证

private boolean validatePin() {

    String pin = pinTxt.getText().toString().trim();

    if (TextUtils.isEmpty(pin) || pin.length() != 4) {
        pin_layout.setError(mContext.getString(R.string.err_msg_pin));
        requestFocus(pinTxt);
        return false;
    } else {
        pin_layout.setErrorEnabled(false);
    }
    return true;
}
我把它称为后文本,改变如下:

public void afterTextChanged(Editable editable) {
        switch (view.getId()) {
            case R.id.pinTxt:
                validatePin();
                break;
        }
    }

我得到的结果是,当我第一次开始在editText中键入少于4个字符时,错误文本显示,但是当我删除所有内容并再次开始键入时,我没有收到错误消息。您知道如何在每次开始输入editText时显示此错误消息吗?而不仅仅是第一次输入?

请在您的xml编辑文本视图中尝试此方法

android:inputType="textNoSuggestions"

在xml中的编辑文本视图中尝试此操作

android:inputType="textNoSuggestions"
试试这个,AddTextChangeListener到EditText。现在将验证代码放入TextWatcher的后TextChanged函数中

试试这个,AddTextChangeListener到EditText。现在,将验证代码放入TextWatcher的后文本更改功能中,将代码更改为:

pinTxt.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        validatePin();
    }
});

因此,我在这里将错误设置为
textInputLayout
,它接受pin的输入,并在错误条件未满足时设置错误
null
,这将隐藏错误。

将代码更改为:

pinTxt.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        validatePin();
    }
});



因此,我在这里将错误设置为
textInputLayout
,它接受pin的输入,并在错误条件未满足时设置错误
null
,这将隐藏错误。

setErrorEnabled(true)?您的
pin\U布局是什么?你能解释一下吗?@timcastelijs我在if-not-work中设置为true。然后我尝试将其设置为else,但每次我键入某个内容时它都会显示错误消息(如果它始终为true,则应该显示错误消息)。使用&&运算符而不是| |运算符或字符串pin=“”;然后取pin=pinTxt.getText().toString().trim()@himanshu1496 pin_布局是一个TextInputLayout,它包装了一个{@link android.widget.EditText}(或子代),当用户输入文本而隐藏提示时,它会显示一个浮动标签。setErrorEnabled(true)?你的
pin_布局是什么?你能解释一下吗?@timcastelijs我在if-not-work中设置为true。然后我尝试将其设置为else,但每次我键入某个内容时它都会显示错误消息(如果它始终为true,则应该显示错误消息)。使用&&运算符而不是| |运算符或字符串pin=“”;然后取pin=pinTxt.getText().toString().trim()@himanshu1496 pin_layout是一个TextInputLayout,它包装了一个{@link android.widget.EditText}(或子代),当由于用户输入文本而隐藏提示时,它会显示一个浮动标签。感谢您的回答,但在xml中设置该属性不会改变任何事情。谢谢您的回答,但是在xml中设置该属性并没有改变任何事情。为什么您认为他的后文本更改不起作用?(顺便说一句)是的。但是,当您将textChangeListener添加到EdtiText时,就不需要像这样检查它“switch(view.getId())”。所以我简化了它的代码,因为简单是主观的。建议在不改变任何真正重要的东西的情况下重构代码是没有用的。谢谢你的回答。我试着按你的方式做,但删除第一个输入后仍然没有显示错误。为什么你认为他的后文本更改不起作用?(顺便说一句)是的。但是,当您将textChangeListener添加到EdtiText时,就不需要像这样检查它“switch(view.getId())”。所以我简化了它的代码,因为简单是主观的。建议在不改变任何真正重要的东西的情况下重构代码是没有用的。谢谢你的回答。我试着按你的方式做,但删除第一个输入后仍然没有显示错误。酷!快乐编码!!:DCool!快乐编码!!:D