2016-12-19 27 views
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()); 
     } 
    } 
} 
+0

您可以添加一些代码吗?你在做什么样的格式?也许这种情况下有一些特定的解决方法。 –

+0

@VladimirJovanović,我在 – Timofey

+1

以上添加了它您是否尝试检查电话号码是否已格式化/未格式化,因此您不会再次调用相同的代码? –

回答

0

您是否尝试过使用onUserInteractionListener方法?如果用户使用类似这样的方式进行交互,您可以尝试在活动中激活一个标志:

@Override 
public void onUserInteraction() { 
    super.onUserInteraction(); 
    userIsInteracting = true; 
} 
相关问题