2012-02-29 4 views
3

私は検索提案を提供するカスタム検索アクティビティを持っています。私は、検索入力ボックスへの参照を取得し、ハンドラを設定します。KeyPressイベントはMonoDroidの特定のキーでのみ発生します

mSearchInput = FindViewById(Resource.Id.searchBoxInput) as EditText; 
mSearchInput.KeyPress += new System.EventHandler<View.KeyEventArgs>(OnSearchKeypress); 

これは、すべてのキープレスに呼ばれるべきハンドラです:何らかの理由で

private void OnSearchKeypress(object sender, View.KeyEventArgs e) { 
    string query = mSearchInput.Text; 
    if (e.KeyCode == Keycode.Enter && !string.IsNullOrEmpty(query)) { 
     e.Handled = true; 
     // launch search results activity 
    } 
    else { 
     e.Handled = false; 
     if (query.Length > 2) { 
      // load suggestions if we have 2+ characters 
     } 
    } 
} 

、ソフトキーボードの上に、特定のキーを押すだけでイベントが発生します。入力して削除するとイベントが発生します。英数字キーでは入力できません。ロジックをすべて取り出し、単にe.KeyCode.ToString()でToastを実行しても、それらのいくつかのキーでトーストしか表示されません。

間違ったイベントを聞いていますか、これはバグですか、他の間違いをしましたか?

デバイス:ドロイドX2 モノラルバージョン:4.0.4

更新:KeyEventActions.Upため、一度ダウンのために一度:私はKeyPressイベントは、キーの各物理プレスのために二回トリガーされることを発見しました。これは、特定のキーだけがイベントを発生させる理由を説明していませんが、プレスまたはリリースが現在イベントをトリガーしているかどうかを調べるには、event.E.Actionをチェックする必要があることに注意する必要があります。

答えて

0

イベントはいつ開始されますか?ユーザーが入力中の場合は、TextChangedイベントを使用できます。その後、OnKeyメソッドで実装を続行できます。

また、「検索」ボタンのために、この記事を見て:

http://www.stackoverflow.com/questions/1489852/android-handle-enter-in-an-edittext

+0

また、のEditTextもTextViewにあるので、あなたは周りが見ていることができます。 – Matthew

+1

イベントは、削除を押して入力し、ハードウェアの戻るボタンを押すだけで起動します。 TextChangedは機能しますが、KeyPressイベントがいくつかの選択キーでのみ発生するバグのようです。それを処理する2つのリスナーを実装すると、悪いパターンのようです。 – dubj

関連する問題