我有一个ListView,它有长按和普通点击的监听器。
为什么当我长按列表项时,普通点击事件也会被调用?
我需要为不同的点击事件设置两个不同的函数。
我有一个ListView,它有长按和普通点击的监听器。
为什么当我长按列表项时,普通点击事件也会被调用?
我需要为不同的点击事件设置两个不同的函数。
来自事件监听器:
onLongClick() - 这将返回一个布尔值,以指示您是否消耗了事件,且不应进一步处理它。也就是说,如果您已经处理了该事件并且希望在这里停止,请返回true;如果您没有处理它和/或该事件应继续传递到任何其他单击监听器,请返回false。
您从onLongClick()
返回true
,但仍然收到普通的单击事件吗?
编辑添加: 对于ListView,您可能正在使用OnItemLongClickListener
。那里的onItemLongClick()
使用类似的布尔返回值来指示是否消耗了事件。
@Override
public boolean onLongClick(View view) {
return true; // or false
}
return true
表示事件已被消耗,处理完成。不会有其他的点击事件被通知。return false
表示事件未被消耗,任何其他的点击事件将继续接收通知。如果你在 onLongClick
之后不想触发 onClick
,那么你应该在 onLongClick
事件中返回 true
。
请确保覆盖OnClickListener
来编写您的onClick
方法。同时,确保覆盖OnLongClickListener
来编写您的onLongClick
方法。并且请确保您的onLongClick
方法返回true
,因为这会消耗onClick
事件。
new View.OnClickListener()
或new View.OnLongClickListener()
的实例来实现setOnLongClickListener
。如果您创建了长按并实现了普通的OnclickListener,您将获得单击激活该方法的错误。
您应该使用new View.OnLongClickListener()
仅捕获长按事件。
myListView.setOnItemLongClickListener(this);
选项,您需要覆盖函数public boolean onItemLongClick(...)
。在这里,您只需要return true
,表示长按已激活并将取消常规单击的触发器。如果返回 false,则还会触发常规单击。 - Brandon