我正在开发一个聊天应用程序.当用户输入或用户完全删除时,我可以获取更新输入状态的事件,我可以更新为"不输入状态"并显示为在线状态.直到这个过程工作正常.
但问题是当用户键入一些行并停止时,我不应该显示在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"); } }
我的问题是如何处理用户键入键盘一段时间然后停止.
谢谢.
基本上你需要实现某种超时.每次用户输入内容时,您都必须安排超时并重置之前安排的任何超时.因此,当用户停止键入时,在指定时间之后触发计时器.
您可以使用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(); } } });