2

TextView我有一个简单的代码,可以在按下按钮后或用户按下“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但我不想使用那些。

有什么提示吗?谢谢!

4

2 回答 2

6
  1. KeyEvent.ACTION_DOWN因为在 press &上有两个动作 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;
}
于 2012-06-29T20:17:17.253 回答
2

事件可能会被触发两次,一次是按下键时,另一次是释放键时。尝试:

@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;
}
于 2012-06-29T20:21:16.007 回答