为什么 onKey()被调用两次?

我正在使用这个代码:

public boolean onKey(View v, int keyCode, KeyEvent event) {
msg = (EditText)findViewById(R.id.msg);
String message = msg.getText().toString();
if(keyCode == 66)
{
//It's hitting here twice.
}
return false;
};

有人能告诉我为什么我按回车键的时候它会响两次吗?

24673 次浏览

OnKey is fired twice: the first time for key down, and the second time for key up, so you have to filter:

YOUR_VIEW.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {


//This is the filter
if (event.getAction()!=KeyEvent.ACTION_DOWN)
return true;


switch (keyCode) {
case KeyEvent.KEYCODE_1 :
MakeToast(1);
break;
case KeyEvent.KEYCODE_2 :
MakeToast(2);
break;
case KeyEvent.KEYCODE_3 :
MakeToast(3);
break;


}


return true;
}


});
edittext.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN || keyEvent.getAction() == KeyEvent.ACTION_UP) {
switch (i) {
case KeyEvent.KEYCODE_ENTER:
if (!HelperFunction.isStringEmpty(edittext.getText().toString())) {


if (loadCount == 0) {


loadCount ++;




}
}
default:
return false;
}
}
return false;
}

this code block prevents calling the code twice. I use loadCount String value , if loadCount == 0 run my code block and i am doing loadCount ++ in my if block. So My Code block work on time.

 itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
int pos = getAdapterPosition();
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_MENU){
//code here
}
return false;
}
});