2015-07-11 23 views
0

我試圖讓EditText有一個數字,當用戶鍵入一個數字時 - 將使用正則表達式模式自動添加逗號。
這是我已經試過:將EditText的值設置爲其自己的值,修改 - 導致凍結

input.addTextChangedListener(new TextWatcher() { 
... 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (input.getText().toString().length() >= 4) 
      input.setText(addComma(input.getText().toString())); 
    } 
... 
} 

addComma(字符串):

public String addComma(String number) { 
    return number.replace(",", "").replaceAll("\\B(?=(\\d{3})+(?!\\d))", ","); 
} 

當輸入與4位的數字 - 該應用程序被凍結,一段時間後崩潰。

+1

因爲你改變在'onTextChanged()'事件的文本。這將循環遞歸直到**堆棧溢出** s。 –

回答

2

因爲你的應用程序有一個無限循環。當您設置的TextView文本的文本更改,因此onTextChanged方法被調用再次導致文本再次更改等等,等等

你可以用它測試羯羊文本一些布爾值已經被編輯過,只當它不只是用你的方法編輯時調用它。

在你的類創建一個域:

private boolean justEdited = false; 

而在你的監聽器使用它:

input.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (input.getText().toString().length() >= 4 && !justEdited) { 
      justEdited = true; 
      input.setText(addComma(input.getText().toString())); 
     } else if (justEdited) { 
      justEdited = false; 
     } 
    } 
} 
+1

工作!非常感謝! – avi12

相關問題