每次用户键入新字符时,我都想编辑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);
这样你就可以避免创建一个无限循环
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。