TextWatcher可以工作但文本更改后没有

时间:2014-05-11 22:07:48

标签: android textview textwatcher

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

@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) {
            }

        }

<EditText
    android:id="@+id/editText1"
    android:hint="Birth Year"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberSigned">
</EditText>

2 个答案:

答案 0 :(得分:0)

好吧,我的朋友,我一直在想它,这是我能得到的最接近的解决方案。试试这个

@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语句的一个小修改。

答案 1 :(得分:0)

replacing to "1900" after I can't edit TextView again. Delete button on keypad does not delete entered value.

这是预期的行为,这并不意味着键盘上的删除按钮不会删除重新输入的值,因为将1替换为1900然后尝试删除{{1} (最后一位数字)将被删除,并且会立即使用输入0调用afterTextChanged,因此您的条件将再次满足190,并且文本将再次替换为<1900 (当您尝试删除时,这会继续)。

我建议添加一项检查以查看输入的1900,我相信您希望用户至少输入minimum length

4 digit