[英]Android: force onKeyListener to wait
我目前有一些與用戶在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等待一定的秒數?
編輯:
我現在使用Timer來安排該功能。 請參閱上面編輯的代碼。
FIRST計時器工作。 但是,當我嘗試重新喚起第二個計時器的函數時,我得到一個異常,說明只有初始化View的主線程才能修改View。 我不確定Looper是如何工作的(我剛剛添加了Looper因為它之前抱怨我需要使用它)。 有什么建議么?
創建一個計時器。 當計時器觸發時,執行您的操作。 如果在定時器到期之前收到另一個按鍵,請取消定時器並重置。 就像是,
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);
}
如果從timer任務的run()
方法內部修改視圖樹,則必須強制它在UI線程上發生。 你可以這樣做,
YouActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// modify your UI components here
}
});
您可以實現TimerTask以便稍后調用my_function。
http://developer.android.com/reference/java/util/TimerTask.html
我會首先嘗試忽略密鑰,發送一個包含所有密鑰數據的延遲消息(處理程序和co),並在收到消息后稍后傳遞該密鑰消息。
但是,我認為你需要setOnKeyListener的其他入口點,可能是onKeyEvent或dispatchKeyEvent
只是一個想法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.