2017-09-23 93 views
1

我已經實現了付款的EditText。根據我輸入的數字,從初始量中減去該數量,並通過TextWatcher顯示在上面的TextView中。像這樣。驗證數字輸入,因爲它正在輸入

enter image description here

enter image description here

enter image description here

我使用TextWatcher實現這一目標。

et_EnterInstallment.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      //To decrease the amount entered from the price (amount as displayed in textview) 
      String editTextValue = et_EnterInstallment.getText().toString(); 

      if(!editTextValue.isEmpty()) { 
       int mainPrice = Integer.parseInt(price); 
       int enteredPrice = Integer.parseInt(et_EnterInstallment.getText().toString()); 

       int valueAfterDeduction = mainPrice - enteredPrice; 

       tv_Price.setText(String.valueOf(valueAfterDeduction)); 
      } else { 
       tv_Price.setText(price); 
      } 
     } 
    }); 

我如何可以驗證的EditText值,以實現以下目標:

1)如果輸入的值大於價格。在這種情況下,用戶不能在該字段中輸入自己的號碼(如果價格是3000,用戶輸入了350,並且當他要輸入另一個0時,價格會更高,因此他將無法請在EditText)的值)

2進入0或00

+0

按照這個答案。這個對我有用。 https://stackoverflow.com/a/14212734/3822391 – Avinash

回答

2

,你去這將驗證您輸入禁用用戶。通過檢查輸入,因爲它已更改。

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 

    if(new String(s.toString()).equals("")){ 
     // we don't want to try and parse an empty string to int or 
     // check for changes when the input is deleted. 

    } 
    else if(new String(s.toString()).equals("0")){ 

     et_EnterInstallment.setText(""); 

     Toast.makeText(context,"Do not enter an amount starting with 0", 
       Toast.LENGTH_LONG).show(); 


    } 
    else if(Integer.parseInt(s.toString()) >3000){ // put price in there. 
     et_EnterInstallment.setText(s.toString().substring(0, s.toString().length() - 1)); 
     et_EnterInstallment.setSelection(et_EnterInstallment.length()); 
     Toast.makeText(context,"You cannot enter an installment " + 
         "greater than the total", 
       Toast.LENGTH_LONG).show(); 

    } 
} 

不要忘了只允許在你的XML數字輸入:

android:inputType="number" 

我用一個硬編碼值的價格進行測試。

一個簡單的github sample

+1

非常感謝你!這非常有效。我添加了一行'et_EnterInstallment.setSelection(et_EnterInstallment.length());'將光標放在最後。 – Zx5

+0

@ Zx5啊是的!好斑點。我也會更新我的git hub代碼。 –

-1

關鍵剿實施的EditText

+0

請添加一些細節。 –

+1

@IntelliJAmiya很多答案都不回答問題。 –

+0

@Yvette哥倫比亞,我沒有注意到,我想到了簡單的Diplaying錯誤抱歉的人.... –

-1
et_EnterInstallment.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      String editTextValue = et_EnterInstallment.getText().toString(); 
      if (!editTextValue.isEmpty()) { 
       if (editTextValue.length()>0&& editTextValue.charAt(0)=='0') { 
        s.replace(0, 1, ""); 
        et_EnterInstallment.setError("Please enter valid number"); 
       } else { 
        int mainPrice = Integer.parseInt(price); 
        int enteredPrice = Integer.parseInt(et_EnterInstallment.getText().toString()); 

        if (enteredPrice > mainPrice) { 
         s.clear(); 
         et_EnterInstallment.setError("Please enter valid number"); 
        } else { 
         int valueAfterDeduction = mainPrice - enteredPrice; 

         tv_Price.setText(String.valueOf(valueAfterDeduction)); 
        } 
       } 
      } 
     } 
    }); 
+0

這將不會驗證輸入,因爲它正在輸入 –