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
以上添加了它您是否嘗試檢查電話號碼是否已格式化/未格式化,因此您不會再次調用相同的代碼? –