我目前有一些与用户在AutocompleteTextView中键入内容相关的操作。但是,我只希望在用户停止键入时注册该操作。从本质上讲,我不希望在用户发送垃圾邮件时发生该操作。下面的代码可能会更好地解释它。
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,因为它之前抱怨我需要使用它)。有什么建议吗?
发布于 2012-03-26 02:42:30
创建计时器。当计时器触发时,执行您的操作。如果您在计时器到期之前收到另一个按键,请取消计时器并重置计时器。像这样,
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线程上执行此操作。你可以这样做,
YouActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// modify your UI components here
}
});发布于 2012-03-26 02:44:11
您可以实现TimerTask,以便稍后调用my_function。
http://developer.android.com/reference/java/util/TimerTask.html
发布于 2012-03-26 02:41:54
首先,我会尝试忽略密钥,发送一个包含所有密钥数据的延迟消息(处理程序和co),然后在收到该消息时传递该密钥消息。
但是,我认为您需要其他入口点setOnKeyListener,可能是onKeyEvent或dispatchKeyEvent
只是一个想法
https://stackoverflow.com/questions/9862849
复制相似问题