2016-09-01 5 views
0

オンスクリーンキーボードの「OK」キーをクリックして操作したいと思っています。そのために私は、テキストフィールドにのKeyListenerを追加しました:なぜKeyListener.onKeyが2回トリガーするのですか?

textField = (EditText) view.findViewById(R.id.text_field); 
textField.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int keyCode, KeyEvent event) { 
    boolean handled = false; 
    if (keyCode == KeyEvent.KEYCODE_ENTER) { 
     okPressed(view); 
     handled = true; 
    } 
    return handled; 
    } 
}); 

そしてokPressed方法で、私は内容を確認しています:

private void okPressed(View view) { 
    String value = textField.getText().toString().trim(); 
    if (value.equals("")) { 
    Toast.makeText(view.getContext(), "Error", Toast.LENGTH_SHORT).show(); 
    return; 
    } 
} 

をそして今、私のテキストフィールドが空でない場合のために、すべてうまく動作します。しかし、フィールドにテキストが含まれていない場合、私のokPressedメソッドは2回実行されます。しかし、なぜ?

KeyEvent's documentationパー

答えて

2

押すたびは、キーイベントのシーケンスによって記述されています。キーを押すと、ACTION_DOWNのキーイベントが開始されます。

最後のキーイベントは、キーアップのためにACTION_UPです。

は、あなたがしたいだけのキーアクションをフィルタリングするためにgetAction()の結果を確認する必要があります(つまり、あなたが唯一の彼らは、ボタンに触れるとすぐにユーザーのリリースやACTION_DOWNはあなたがトリガーしたい場合は場合に発生させるかどうACTION_UP )。

+0

私はACTION_UPでソリューションを選択しましたが、正常に動作します! – altralaser

関連する問題