2012-03-25 8 views
0

私は現在、ユーザーがAutocompleteTextViewに何かを入力したときに関連するアクションを持っています。しかし、ユーザーが入力をやめた場合にのみ、アクションを登録する必要があります。基本的に、私はユーザーが迷惑メールの入力をしている間にアクションが起こることを望んでいません。次のコードは、少し上手く説明するかもしれません。Android:強制的にonKeyListenerを待機させる

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を強制することができます任意のアイデア?

EDIT:

私は今の機能をスケジュールするためにタイマーを使用しています。上記の編集コードを参照してください。

FIRSTタイマーが機能します。しかし、2番目のタイマーの機能を再現しようとすると、ビューを初期化したメインスレッドだけがビューを変更できるという例外が表示されます。私はルーパーがどのように動作するのかわかりません(私はそれを使用する前に不平を言いましたので、私はルーパーを追加しました)。助言がありますか?

答えて

1

タイマーを作成します。タイマーが鳴ったら、あなたの行動をしてください。タイマーの有効期限が切れる前にもう一度キーを押すと、タイマーをキャンセルしてリセットします。何かのように、

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スレッド上で発生することを強制する必要があります。あなたは、あなたが後ではmy_functionを呼び出すためにTimerTaskをを実装することができ、このような、

YouActivity.this.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    // modify your UI components here 
    } 
}); 
+0

ありがとうございます!私はそれをTimerTaskで処理しました。 – Jin

+0

私はスレッドに関する新しい問題を抱えていますが、スケジュールされたタイマータスクを同時に表示を変更する関数で動作させる方法を知っていますか? – Jin

+0

編集された回答を参照してください。 –

0

最初にキーを無視しようとすると、 は、すべてのキーデータを保持する遅延メッセージ(ハンドラとコグ)を送信し、メッセージを受信したときにそのキーメッセージを後で配信します。

はしかし、私はあなたがonKeyEventすることができる、他のエントリポイントにsetOnKeyListenerが必要だと思うかdispatchKeyEventジャストアイデア

関連する問題