将EditText的值设置为自己的值,已修改 - 导致冻结

时间:2015-07-11 15:32:28

标签: java android regex numbers comma

我正在尝试使用带编号的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 个答案:

答案 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;
        }
    }
}