Android 执行普通单击和长时间单击按钮
我有一个名为CheckIn的按钮。看看我的代码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.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;
}
});