30

我有一个名为 CheckIn 的按钮。看看我的代码。

    checkIn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

       Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_LONG).show();

    });


    checkIn.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

            Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_LONG).show();



            return false;
        }
    });

现在,当我正常按下按钮时,消息显示为正常按下。当我长按按钮时,消息显示为长按以及正常按下。我想要什么,当我长按按钮时,只有长按事件应该触发而不是正常的按下事件。我怎样才能实现这个?

4

7 回答 7

47

我得到了我的问题的解决方案。返回 true 而不是 false。请参见下文:-

    checkIn.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

            Toast.makeText(HomeSafeActivity.this, "Long preess", Toast.LENGTH_LONG).show();

            return true;
        }
    });
于 2013-09-20T07:51:02.357 回答
17

onLongClick()- 这将返回一个布尔值,以指示您是否已消费该事件并且不应继续进行。也就是说,return true表明你已经处理了这个事件,它应该在这里停止;return false如果您还没有处理它和/或事件应该继续到任何其他on-click listeners

于 2013-09-20T07:38:49.363 回答
9

如果长按,您应该返回 true

例子:

  btnBookingMasterCab.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(preCheckoutInfo!=null){
                rlChooseCard.setVisibility(View.VISIBLE);
            }
            return true;
        }
    });
于 2016-01-22T04:12:01.613 回答
3

public boolean onLongClick(View v) 是布尔值,如果被点击则返回 true,因此返回 true;

于 2017-11-17T11:01:25.390 回答
1

这是一个解决方案(如果(当两者都被触发时)这将起作用,首先触发长按,然后触发正常按压):

int clickFlag = 0;
checkIn.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {

    if(clickFlag != 2){
      Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_SHORT).show();
      clickFlag = 0;
    }

  });

  checkIn.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {

      Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_SHORT).show();

      clickFlag = 2;
      return false;
    }
  });
}
于 2013-09-20T07:54:06.247 回答
-1

尝试这个; 它应该工作。

checkIn.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {

        checkIn.setOnClickListener(null);

        Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_LONG).show();

        return false;
    }
});
于 2013-09-20T07:43:35.590 回答
-3

尝试 android:onclick="btnPressed" 而不是 OnClickListener 并在我的测试代码中使用 OnLongClickListener 没问题

于 2013-09-20T07:52:27.033 回答