我想在每次用户输入新字符时编辑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());
}
}
}
答案 0 :(得分:4)
在TextWatcher中调用setText方法时需要注意。否则,您将创建一个无限循环,因为您总是在更改文本。
如果真的必要,您可以尝试下面的文本:
if(!telephone.getText().toString().equals(formatted)) {
telephone.setText(formatted);
}
而不仅仅是:
telephone.setText(formatted);
这样你就可以避免创建无限循环