2016-01-12 26 views
0

我需要在EditText中只輸入0到20之間的偶數。然而,當我按鍵'1'和'2'給出12時,它給了我一個Toast,在我按下鍵'2'之前,我的輸入無效。如何在TextWatcher中只允許EditText中的偶數?

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(); 
    } 
} 
}); 
+1

而是測試對用戶輸入的每一個字符的輸入,這將是簡單的,只是讓他們在號碼類型,然後打一個提交按鈕將整個值發送到您的奇數/偶數測試。然後你可以做一個'if(val%2 == 0)// val是偶數;' – NoChinDeluxe

+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); 
}