我需要在EditText
中仅输入0到20之间的偶数。但是,当我按下按键时,' 1'和' 2'给12分,它给了我一个Toast
我的输入无效,然后才按下按键' 2'。
Textwatcher :
public void afterTextChanged(Editable s) {
try {
int val = Integer.parseInt(s.toString());
if (val > 20) {
s.replace(0, s.length(), "20", 0, 2);
} else if (val < 0) {
s.replace(0, s.length(), "0", 0, 1);
} else if (val == 1) {
s.replace(0, s.length(), "1", 0, 2);
} else if (val == 3) {
s.replace(0, s.length(), "3", 0, 2);
} else if (val == 5) {
s.replace(0, s.length(), "5", 0, 2);
} else if (val == 7) {
s.replace(0, s.length(), "7", 0, 2);
} else if (val == 9) {
s.replace(0, s.length(), "9", 0, 2);
} else if (val == 11) {
s.replace(0, s.length(), "11", 0, 2);
} else if (val == 13) {
s.replace(0, s.length(), "13", 0, 2);
} else if (val == 15) {
s.replace(0, s.length(), "15", 0, 2);
} else if (val == 17) {
s.replace(0, s.length(), "17", 0, 2);
} else if (val == 19) {
s.replace(0, s.length(), "19", 0, 2);
}
} catch (NumberFormatException ex) {
Toast.makeText(MainActivity.this,"invalid!",Toast.LENGTH_LONG).show();
}
}
});
答案 0 :(得分:1)
你几乎每个号码都会收到一个afterTextChanged
电话,所以目前你永远无法写12个。
最好的方法是在用户继续操作后进行验证(失去焦点,按下另一个项目),并在格式正确的情况下提醒他们。
或者你可以在几秒钟后开始runnable
检查它。
至于改变它,会更容易做到
public void postUpdateValidate(int val){
if(val % 2 == 1){ //Checks to see if the remainder is 1 after dividing by 2
val++;
}
if(val > 20){
val = 20;
}
if(val % 0){
val = 0;
}
edittext.setText("" + val);
}