长按事件也会触发点击事件。

14

我使用按钮的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/找到所有的代码。

谢谢。

3个回答

34
我不确定这些事件的顺序,但是onLongClick处理程序返回一个布尔值来指示事件是否已处理。如果你处理了该事件,应该返回true,以便其他点击事件不会被调用。我不知道这是否会防止onClick()事件的触发。
你也可以使用setClickable(boolean)和setLongClickable(boolean) 来开启或关闭这些事件。
你可以在这里找到更多关于UI事件的信息。

2
我怎么会忘了布尔值。你肯定是对的。返回true应该能够防止onClick事件。谢谢。 - Ömer

0

长按解决方案:单击将无效:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接