这是我的文本观察者,用于控制用户的出生年份输入。如果用户输入少于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>
答案 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