代码之家  ›  专栏  ›  技术社区  ›  Ömer

LongClick事件也会触发Click事件

  •  14
  • Ömer  · 技术社区  · 17 年前

    我使用按钮的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/

    2 回复  |  直到 15 年前
        1
  •  34
  •   Arnold Spence    17 年前

    我不确定这些事件发生的顺序,但是onLongClick处理程序返回一个bool来指示事件是否被处理。如果处理了true,则应返回true,以便不会调用其他单击事件。但我不知道这是否会阻止onClick()启动。

    您还可以使用setClickable(布尔值)和setLongClickable(布尔值)关闭和打开这些事件

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

        3
  •  0
  •   Yamini    7 年前

    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;
                }
            });