2016-12-19 65 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; 
} 
相關問題