每次用户键入新字符时,我都想编辑EditText字段内容。基本上我想用libphonenumber格式化一个电话号码。
我实现了一个TextWatcher读取字段内容并将其格式化为电话格式。但每次我用格式化的字符串设置EditText文本时,观察程序都会再次调用,再次设置文本,它就会陷入这个无限循环中。
在用户输入文本时,编辑文本的最佳或正确方法是什么?

@Override
public void afterTextChanged(Editable editable) {
    if (editable.length() > 1) {
        try {
            PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
            PhoneNumber numberProto = phoneUtil.parse(editable.toString(), "BR");
            String formatted = phoneUtil.format(numberProto, PhoneNumberFormat.NATIONAL);
            telephone.setText(formatted);
        } catch (NumberParseException e) {
           Log.d("Telefone", "NumberParseException was thrown: " + e.toString());
        }
    }
}

最佳答案

在TextWatcher中调用settext方法时需要小心。否则您将创建一个无限循环,因为您总是在更改文本。
如果确实需要,您可以尝试以下设置文本:

if(!telephone.getText().toString().equals(formatted)) {
    telephone.setText(formatted);
}

而不仅仅是:
telephone.setText(formatted);

这样就可以避免创建无限循环

08-26 01:24