Android 我的按钮总是使用performClick调用两次

Android 我的按钮总是使用performClick调用两次,android,android-button,Android,Android Button,我有一个简单的代码,在按下按钮或用户按下“回车”键后,在TextView中显示字符串。当用户按下按钮时,全部为查找,但当按下“enter”时,它调用performClick()调用与按钮相同的函数。但我的爱好总是叫两次: private OnKeyListener ChampKeyListener = new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, Ke

我有一个简单的代码,在按下按钮或用户按下“回车”键后,在
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

        }
    };
我怎样才能阻止它。我已经看到我可以解决去另一个
视图
活动
的问题,但我不想使用这些

有什么提示吗?谢谢

  • 因为按下键有两个动作。下键和上键有两个动作

  • 如果侦听器已使用事件,则返回
    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;
    }
    

    或者最好也用这个来hanlde KEYCODE_DPAD_中心谢谢你解决了我的问题!另一个踏板也很有用!