【问题标题】:How to detect only user's input in EditText?如何仅检测用户在 EditText 中的输入?
【发布时间】:2016-12-19 20:30:54
【问题描述】:

我有 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());
        }
    }
}

【问题讨论】:

  • 你能添加一些代码吗?你在做什么格式?也许有一些针对这种情况的特定解决方法。
  • @VladimirJovanović,我在上面添加了它
  • 您是否尝试检查电话号码是否已格式化/未格式化,因此您不会再次拨打相同的代码?
  • @VladimirJovanović,谢谢,它帮助了我!

标签: java android concurrency java.util.concurrent


【解决方案1】:

您是否尝试过使用 onUserInteractionListener 方法?如果用户使用以下方式进行交互,您可以尝试在 Activity 中激活标志:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多