首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓:强制onKeyListener等待

安卓:强制onKeyListener等待
EN

Stack Overflow用户
提问于 2012-03-26 02:35:03
回答 3查看 502关注 0票数 0

我目前有一些与用户在AutocompleteTextView中键入内容相关的操作。但是,我只希望在用户停止键入时注册该操作。从本质上讲,我不希望在用户发送垃圾邮件时发生该操作。下面的代码可能会更好地解释它。

代码语言:javascript
复制
AutocompleteTextView search = ...;
search.setOnKeyListener(new onKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            if (mTimer != null)
                mTimer.cancel();
            mTimer = new Timer();
            mTimer.schedule(new TimerTask() {
                public void run() {
                    my_func();
                }
            }, 1000);
            return true;
        }
        return false;
    }
}

public void my_func() {
    Looper.prepare();

    // Do some function that changes the View

    Looper.loop();
}

你知道如何强制keyListener等待一定的秒数吗?

编辑:

我现在使用计时器来调度函数。请参考上面编辑过的代码。

第一个计时器工作。但是,当我尝试重新调用函数的第二个计时器时,我得到一个异常,说明只有初始化视图的主线程才能修改视图。我不确定Looper是如何工作的(我只是添加了Looper,因为它之前抱怨我需要使用它)。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-26 02:42:30

创建计时器。当计时器触发时,执行您的操作。如果您在计时器到期之前收到另一个按键,请取消计时器并重置计时器。像这样,

代码语言:javascript
复制
public boolean onKey(View v, int keyCode, KeyEvent event) {
  if (mTimer != null) {
    mTimer.cancel();
  }
  mTimer = new Timer();
  mTimer.schedule(new TimerTask() {
    @Override 
    public void run() {
      // do what you need to do after the one second here
      mTimer = null;
    }
  }, 1000);
}    

如果从计时器任务的run()方法内部修改视图树,则必须强制在UI线程上执行此操作。你可以这样做,

代码语言:javascript
复制
YouActivity.this.runOnUiThread(new Runnable() {
  @Override
  public void run() {
    // modify your UI components here
  }
});
票数 1
EN

Stack Overflow用户

发布于 2012-03-26 02:44:11

您可以实现TimerTask,以便稍后调用my_function。

http://developer.android.com/reference/java/util/TimerTask.html

票数 1
EN

Stack Overflow用户

发布于 2012-03-26 02:41:54

首先,我会尝试忽略密钥,发送一个包含所有密钥数据的延迟消息(处理程序和co),然后在收到该消息时传递该密钥消息。

但是,我认为您需要其他入口点setOnKeyListener,可能是onKeyEvent或dispatchKeyEvent

只是一个想法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9862849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档