Чтобы избежать перехода фокуса на следующее редактируемое поле (если оно у вас есть), вы можете игнорировать события нажатия клавиши, но обрабатывать события нажатия клавиши. Я также предпочитаю сначала фильтровать по ключевому коду, предполагая, что он будет немного более эффективным. Кстати, помните, что возвращение true означает, что вы обработали событие, так что никакой другой слушатель не будет. Во всяком случае, вот моя версия.
ETFind.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing yet
} else if (event.getAction() == KeyEvent.ACTION_UP) {
findForward();
} // is there any other option here?...
// Regardless of what we did above,
// we do not want to propagate the Enter key up
// since it was our task to handle it.
return true;
} else {
// it is not an Enter key - let others handle the event
return false;
}
}
});