0
我有EditText和TextWatcher来监听这个视图。 TextWatcher内部我格式化了特定的输入字符串。它再次调用我的TextWatcher,但我不想要它。我只想检测用户输入。所以,我尝试了很多方法来达到它,但它们没有任何效果。用户可以非常快地输入文本,并且我无法在格式化文本时删除监听器,因为我没有任何事件。也许android框架有其他机制来听EditText?如何检测用户在EditText中的输入?
代码。现在这个代码不起作用。我们可以在格式化之前删除侦听器,并在添加或使用某个标志后添加,但对我无效。
public static class LoginWatcher implements TextWatcher {
private OnLoginEnterListener listener;
private LoginFilter loginFilter = new LoginFilter();
private EditText target;
public LoginWatcher(OnLoginEnterListener onLoginInputListener) {
listener = onLoginInputListener;
target = listener.getTarget();
}
@Override
public synchronized void afterTextChanged(Editable s) {
boolean isSymbolsChecked = loginFilter.check(s.toString());
boolean isEmail = StringUtils.isEmailValid(s.toString());
boolean isPhoneNumber = isPhoneNumber(s.toString());
if ((isSymbolsChecked && isEmail) || isPhoneNumber) {
listener.onCorrectLoginEntered(s.toString());
listener.onCheckedSymbolsEntered(s.toString());
} else {
listener.onIncorrectLoginEntered(s.toString());
if (isSymbolsChecked) {
listener.onCheckedSymbolsEntered(s.toString());
} else {
listener.onUnsupportedSymbolsEntered(s.toString());
}
}
if (isPhoneNumber) {
String formatted = formatPhoneNumber(s.toString());
target.setText(formatted);
target.setSelection(formatted.length());
} else {
String unformatted = unFormatPhoneNumber(s.toString());
target.setText(unformatted);
target.setSelection(unformatted.length());
}
}
}
您可以添加一些代码吗?你在做什么样的格式?也许这种情况下有一些特定的解决方法。 –
@VladimirJovanović,我在 – Timofey
以上添加了它您是否尝试检查电话号码是否已格式化/未格式化,因此您不会再次调用相同的代码? –