Android 执行普通单击和长时间单击按钮

Android 执行普通单击和长时间单击按钮,android,button,Android,Button,我有一个名为CheckIn的按钮。看看我的代码 checkIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_LONG).show(); }); check

我有一个名为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;
        }
    });

现在,当我正常按下按钮时,信息显示为正常按下。当我长按按钮时,信息显示为长按和正常按下。我想要的是,当我长按按钮时,只会触发长按事件,而不是正常的按下事件。我如何实现这一点

onLongClick()
-这将返回一个布尔值,指示您是否已使用该事件,并且不应进一步携带该事件。也就是说,
返回true
,表示您已经处理了事件,应该在这里停止
返回false
如果您没有处理它和/或事件应该继续到任何其他
上单击侦听器

尝试此操作;它应该会起作用

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

我得到了问题的答案。返回真而不是假。请参见以下内容:-

    checkIn.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

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

            return true;
        }
    });
尝试android:onclick=“btnPressed”而不是OnClickListener,并在我的测试代码中使用onlongclickstener没有问题这里有一个解决方案(如果(当两者都被触发时),首先触发长按,然后正常按):


如果长时间单击,则应返回true

示例:

  btnBookingMasterCab.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(preCheckoutInfo!=null){
                rlChooseCard.setVisibility(View.VISIBLE);
            }
            return true;
        }
    });
public boolean onLongClick(视图v)为布尔值,如果单击它,则返回true
所以,让回归成为现实

在onLongClickListener()中禁用onClickListener()。这可能是一种选择。我不确定它是否有效,只是激发了一些想法:)我认为@ClaireG是对的。尝试使用该解决方案。在函数
onClick
onLongClick
中都放置一个标志,以相互排除(通过
if
语句)。如果你有两个听众,你不能取消两个事件中的一个,这是个好主意;但是,如果有其他东西而不是
Toast
,该怎么办?实际上,我只是在活动中定义Toast作为一个示例。我使用startActivity而不是Toast,这两个事件都是触发的。长时间单击也被视为单击,这就是调用这两个函数的原因。您如何区分长按和短按?是的,它仅在单击事件发生时触发,而按钮转到长按时不会触发。长按时返回true,则不需要标志
  btnBookingMasterCab.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(preCheckoutInfo!=null){
                rlChooseCard.setVisibility(View.VISIBLE);
            }
            return true;
        }
    });