2011-09-15 49 views
33

您好,EditText與「文本= 0.00」。當我按數字3它應該是0.03 &第二次當我按數字5文本應該是0.35。和35.0,35.09一樣。 EditText最初的值爲0.00。如何在按下數字時使用EditText onTextChanged事件?

這些都是用相同的EditText完成的。

我該如何做到這一點?我曾嘗試addTextChangedListener()TextWatcher()

+0

ü可以給我烏爾解決方案嗎?我需要完全相同的東西 – usman

回答

30

您已選擇正確的方法。您必須使用TextWatcher擴展課程並覆蓋afterTextChanged()beforeTextChanged()onTextChanged()

您必須在afterTextChanged()方法中編寫您所需的邏輯來實現您所需的功能。

+1

當我做setText()時,再次調用afterTextChanged,如何防止? – usman

74

你也可以試試這個:

EditText searchTo = (EditText)findViewById(R.id.medittext); 
searchTo.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     doSomething(); 
    } 
}); 
+2

當我做setText()再次調用onTextChanged,如何防止? – usman

+4

您無法防止在setText事件上調用onTextChanged。你必須自己去做,比如在設置文本之前使用一些布爾值設置爲true,並在ontextchanged上檢查布爾值,並決定是否繼續進行onTextChanged事件。另外一個解決方案是在設置文本之前刪除TextChangeListener並在設置文本後再次設置。 –

+0

是的,你不能阻止。如果您需要知道修改的位置,Google建議使用[setSpan](https://developer.android.com/reference/android/text/Spannable.html)方法 –

5

在這裏,我寫了類似於u需要的東西:

inputBoxNumberEt.setText(".  "); 
    inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length()); 
    inputBoxNumberEt.addTextChangedListener(new TextWatcher() { 

     boolean ignoreChange = false; 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, 
             int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, 
            int before, int count) { 
      if (!ignoreChange) { 
       String string = s.toString(); 
       string = string.replace(".", ""); 
       string = string.replace(" ", ""); 
       if (string.length() == 0) 
        string = ".  "; 
       else if (string.length() == 1) 
        string = ". " + string; 
       else if (string.length() == 2) 
        string = "." + string; 
       else if (string.length() > 2) 
        string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length()); 
       ignoreChange = true; 
       inputBoxNumberEt.setText(string); 
       inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length()); 
       ignoreChange = false; 
      } 
     } 
    }); 
+0

Shoule將邏輯放入「afterTextChanged」中。有關「onTextChanged」的文檔 - 「嘗試從此回調中更改s是錯誤的」 – giulio

相關問題