【问题标题】:How to handle if user stopped after typing in edittext android?如果用户在输入edittext android后停止如何处理?
【发布时间】:2015-12-24 14:20:24
【问题描述】:

我正在开发一个聊天应用程序。当用户输入或用户完全删除时,我可以获得更新输入状态的事件,我可以更新为“未输入状态”并显示为在线。直到这个过程正常。

但问题是当用户输入一些行并停止时,我不应该显示在 whatsapp 中应用的输入。如何处理?

这是我所做的代码。

        ChatMsg.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {
                   if (edtChatMsg.getText().toString().trim().length() > 0) {
                    if (!isTyping) {
                            isTyping = true;
                            serviceCall();
                          }
                  else{
                      isTyping = false;
                        serviceCall();
                      }
            }
        so at result
    @Override
     protected void onTyping(String message) {
    if (message.equalsIgnoreCase("Typing…")) {
        txtUserPersonStatus.setText("Typing…");
    } else {
        txtUserPersonStatus.setText("Online");
    }
}

我的问题是当用户在键盘上输入一段时间然后停止时如何处理。

谢谢。

【问题讨论】:

    标签: android android-layout chat android-keypad android-touch-event


    【解决方案1】:

    基本上你需要实现某种超时。每次用户键入内容时,您都必须安排超时并重置您之前安排的任何超时。因此,当用户停止输入时,计时器会在指定时间后触发。

    您可以使用Handler 来执行此操作,例如:

    final int TYPING_TIMEOUT = 5000; // 5 seconds timeout
    final Handler timeoutHandler = new Handler();
    final Runnable typingTimeout = new Runnable() {
        public void run() {
            isTyping = false;
            serviceCall();
        }
    };
    
    ChatMsg.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // reset the timeout
            timeoutHandler.removeCallbacks(typingTimeout);
    
            if (edtChatMsg.getText().toString().trim().length() > 0) {
                // schedule the timeout
                timeoutHandler.postDelayed(typingTimeout, TYPING_TIMEOUT);
    
                if (!isTyping) {
                    isTyping = true;
                    serviceCall();
                }
            }
            else {
                isTyping = false;
                serviceCall();
            }
        }
    });
    

    【讨论】:

    • 目前完美的一个:)
    【解决方案2】:

    使用处理程序:

    _AFKHandler = new Handler();
    _AFKRunnable = new Runnable() {
                public void run() {
                    isTyping = false;
                            serviceCall();
                }
            };
    
    ChatMsg.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void onTextChanged(CharSequence s, int start,
                        int before, int count) {
                       _AFKHandler.removeCallbacks(_AFKRunnable);
                       if (edtChatMsg.getText().toString().trim().length() > 0) {
                        if (!isTyping) {
                                isTyping = true;
                                serviceCall();
                                _AFKHandler.postDelayed(_AFKRunnable,AFK_TIMEOUT_VALUE_IN_MS);
                              }
                      else{
                          isTyping = false;
                            serviceCall();
                          }
                }
            so at result
        @Override
         protected void onTyping(String message) {
        if (message.equalsIgnoreCase("Typing…")) {
            txtUserPersonStatus.setText("Typing…");
        } else {
            txtUserPersonStatus.setText("Online");
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为你需要使用:

      @Override
      public void afterTextChanged(Editable arg0) {
          //  arg0=null ,Handler ---is empty ;
      
      }
      
      @Override
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
              int arg3) {
          // Handler --- is typing
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-07
        • 2019-04-28
        • 2010-12-26
        相关资源
        最近更新 更多