Моя кнопка всегда вызывается дважды с 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 2

2 ответа:

  1. Так же есть два действия на прессу KeyEvent.ACTION_DOWN & KeyEvent.ACTION_UP

  2. 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;
}