Android TextWatcher工作,但在文本更改后不工作

Android TextWatcher工作,但在文本更改后不工作,android,textview,textwatcher,Android,Textview,Textwatcher,这是我的文本监视程序,用于控制用户的出生年份输入。如果用户输入的值小于1900,我想将其替换为1900。应用程序工作正常。我可以为TextView输入一个值。但当开始输入以1开始,然后在我无法再次编辑TextView后立即替换为1900。键盘上的删除按钮不会删除输入的值 @Override public void afterTextChanged(Editable s) { try { int birth = Intege

这是我的文本监视程序,用于控制用户的出生年份输入。如果用户输入的值小于1900,我想将其替换为1900。应用程序工作正常。我可以为TextView输入一个值。但当开始输入以1开始,然后在我无法再次编辑TextView后立即替换为1900。键盘上的删除按钮不会删除输入的值

@Override
        public void afterTextChanged(Editable s) {

            try {
                int birth = Integer.parseInt(s.toString());

                if (birth < 1900) {
                    s.replace(0, s.length(), "1900");
                }

            } catch (NumberFormatException e) {
            }

        }

好吧,我的朋友,我已经考虑了一段时间了,这是我能得到的最接近的解决方案。试试这个

@Override
        public void afterTextChanged(Editable s) {

            try {
                int birth = Integer.parseInt(s.toString());

                if (birth < 1900 && s.length()>=4) {
                    s.replace(0, s.length(), "1900");
                }

            } catch (NumberFormatException e) {
            }

        }
这只是对if语句的一个小修改

replacing to "1900" after I can't edit TextView again. Delete button on keypad does not delete entered value.
这是预期的行为,并不意味着键盘上的delete(删除)按钮不删除重新输入的值,因为在将1替换为1900,然后尝试删除0后,最后一位数字将被删除,并立即使用input 190调用afterTextChanged,因此您的条件再次满足
replacing to "1900" after I can't edit TextView again. Delete button on keypad does not delete entered value.
 public void afterTextChanged(Editable s) {

    if(s.toString().length < 4) {
        return;
    }
      // do your other logic here

 }