私は検索提案を提供するカスタム検索アクティビティを持っています。私は、検索入力ボックスへの参照を取得し、ハンドラを設定します。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をチェックする必要があることに注意する必要があります。
また、のEditTextもTextViewにあるので、あなたは周りが見ていることができます。 – Matthew
イベントは、削除を押して入力し、ハードウェアの戻るボタンを押すだけで起動します。 TextChangedは機能しますが、KeyPressイベントがいくつかの選択キーでのみ発生するバグのようです。それを処理する2つのリスナーを実装すると、悪いパターンのようです。 – dubj