LongClick 事件也会触发 Click 事件

Posted

技术标签:

【中文标题】LongClick 事件也会触发 Click 事件【英文标题】:LongClick event also triggers Click event 【发布时间】:2010-10-19 00:51:20 【问题描述】:

我使用按钮的 onLongClick 和 onClick 事件来获取用户输入。每当;用户长按并触发onLongClick事件,同时触发onClick事件。我找不到我的问题。两种方法的代码如下:

@Override
    public void onClick(View v) 
        switch(((Button) v).getId())
        
        case R.id.enter:
            EntertheNumber();
            break;
        case R.id.clear:
            CleartheNumber();
            break;
        case R.id.number_zero:
        case R.id.number_one:
        case R.id.number_two:
        case R.id.number_three:
        case R.id.number_four:
        case R.id.number_five:
        case R.id.number_six:
        case R.id.number_seven:
        case R.id.number_eight:
        case R.id.number_nine:
            AddtotheNumber(mEditor, (Button) v);
            break;
        
@Override
    public boolean onLongClick(View view) 
        if(SMBGuesstheNumber.bDisplayFlagList)
        
            theActiveButton = (Button) view;
            showDialog(R.id.display_flaglist);
        
        return false;
    

其实我的项目是开源的。所以,你可以在http://code.google.com/p/guessthenumber/找到所有代码

谢谢。

【问题讨论】:

【参考方案1】:

我不确定这些事件发生的顺序,但 onLongClick 处理程序返回一个布尔值来指示事件是否已被处理。如果您处理了它,您应该返回 true 以便不会调用其他点击事件。我不知道这是否会阻止 onClick() 触发。

您也可以使用 setClickable(boolean) 和 setLongClickable(boolean) 关闭和打开这些事件

您可以找到此信息以及有关 UI 事件的更多信息here。

【讨论】:

我怎么错过了布尔值。你绝对是对的。返回 true 应该阻止 onClick。谢谢。【参考方案2】:

这里是关于触摸事件的简要总结: http://rxwen.blogspot.com/2010/10/android-touch-event-summary.html

【讨论】:

【参考方案3】:

LongClick SingleClick 上的解决方案将不起作用:

rippleView.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
            //Your code
            
        );
rippleView.setOnLongClickListener(new View.OnLongClickListener() 
            @Override
            public boolean onLongClick(View v) 
                return true;
            
        );

【讨论】:

以上是关于LongClick 事件也会触发 Click 事件的主要内容,如果未能解决你的问题,请参考以下文章

回车事件如何触发不同的click

如何确保使用javascript更新select也会触发onchange事件侦听器?

jQuery事件

移动web终端交互优化

jquery为啥触发多次click事件

jquery模拟鼠标点击动作