我有EditText和TextWatcher来监听这个视图。在TextWatcher内部我格式化特定的输入字符串。它再次调用我的TextWatcher,但我不想要它。我想只检测用户输入。所以,我尝试了很多方法来实现它,但它们没有任何效果。用户可以非常快速地输入文本,我无法在格式化文本时删除监听器,因为我丢失了任何事件。也许android框架有其他机制来监听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)
您是否尝试过使用onUserInteractionListener方法?如果用户使用以下内容进行了交互,您可以尝试激活活动中的标记:
@Override
public void onUserInteraction () {
super.onUserInteraction ();
userIsInteracting = true;
}