У меня есть EditText и TextWatcher, которые прослушивают это представление. Внутри TextWatcher я форматирует определенные строки ввода. Он снова вызывает мой TextWatcher, но я не хочу этого. Я хочу обнаружить только пользовательский ввод. Итак, я попробовал много способов достичь этого, но они не имели никакого эффекта. Пользователь может вводить текст очень быстро, и я не могу удалить прослушиватель во время форматирования текста, потому что я теряю любые события. Может быть, у android framework есть другие механизмы для прослушивания 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
Вы пытались проверить, был ли номер телефона уже отформатирован/неформатирован, так что вы не назовете тот же код еще раз? –