Моя кнопка всегда вызывается дважды с performClick
У меня есть простой код, который показывает строки в TextView
после нажатия кнопки или когда пользователь нажимает "Enter". Когда пользователь нажимает кнопку all-это find, но когда нажимается "enter", он вызывает performClick()
для вызова той же функции, что и кнопка. Но моя функция всегда вызывается дважды :
private OnKeyListener ChampKeyListener = new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
recherche.performClick(); // recherche is my button
}
return false;
}
};
private OnClickListener RechercheListener = new OnClickListener() {
@Override
public void onClick(View v) {
//whatever I have tried here it is always called twice
}
};
Как я могу это остановить? Я видел, что я мог бы решить, что мой переход к другому View
или Activity
, но я не хочу использовать их.
Какой-нибудь намек? Спасибо!
2 ответа:
Так же есть два действия на прессу
KeyEvent.ACTION_DOWN
&KeyEvent.ACTION_UP
Http://developer.android.com/reference/android/view/View.OnKeyListener.html
Возвращает
true
, если слушатель использовал событие,false
в противном случае.Попробуйте...
public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if(keyCode == KeyEvent.KEYCODE_ENTER) { recherche.performClick(); // recherche is my button return true; } } return false; }
Возможно, что событие запускается дважды: один раз при нажатии клавиши и еще раз при ее отпускании. Попробуйте:
@Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) { recherche.performClick(); // recherche is my button return true; // consume event } return false; }