我正在尝试使用带编号的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位数字时 - 应用程序冻结并在一段时间后崩溃。
答案 0 :(得分: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;
}
}
}