2015-07-11 25 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

相关问题