2016-12-19 9 views
0

У меня есть 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()); 
     } 
    } 
} 
+0

Можете вы могли бы добавить код? Какое форматирование вы делаете? Может быть, в этом случае есть какое-то определенное обходное решение. –

+0

@ VladimirJovanović, я добавил его выше – Timofey

+1

Вы пытались проверить, был ли номер телефона уже отформатирован/неформатирован, так что вы не назовете тот же код еще раз? –

ответ

0

Вы пытались использовать метод onUserInteractionListener? Вы можете попробовать активировать флаг в Управлении, если пользователь взаимодействовал, используя что-то вроде этого:

@Override 
public void onUserInteraction() { 
    super.onUserInteraction(); 
    userIsInteracting = true; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^