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

Setting an EditText's value to its own value, modified - causes to freeze

我正在尝试使用带有数字的 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()));
    }
...
}

添加逗号(字符串):

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

输入 4 位数字时 - 一段时间后应用会死机并崩溃。

因为你的应用程序中有一个无限循环。当您设置 TextView 的文本时,您的文本会发生变化,因此会再次调用 onTextChanged 方法,导致文本再次发生变化,等等

您可以使用一些布尔值来测试文本是否已被编辑,并且仅在文本未被您的方法编辑时才调用它。

在您的 class 中创建一个字段:

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