我有一个带有侦听器的ListView,可以进行长时间的点击和定期点击。
为什么,当我长按列表项时,也会调用常规点击事件?
我需要为不同的点击提供两个单独的功能。
答案 0 :(得分:254)
onLongClick() - 返回一个布尔值,表示您是否已经消耗了该事件,并且不应该进一步携带它。也就是说,返回true表示你已经处理了这个事件,它应该在这里停止;如果您没有处理它和/或该事件应该继续任何其他点击监听器,则返回false。
您是否正在从true
返回onLongClick()
并仍然获得正常的点击事件?
已编辑添加:对于ListView,您可能正在使用OnItemLongClickListener
。 onItemLongClick()
使用类似的布尔返回值来指示它是否消耗了该事件。
答案 1 :(得分:36)
用简单的术语重述答案:
假设:
@Override
public boolean onLongClick(View view) {
return true; // or false
}
return true
表示事件已被消耗。它被处理了。不会通知其他点击事件。return false
表示事件未被消耗。任何其他点击事件将继续接收通知。因此,如果您不想在onClick
之后触发onLongClick
,那么您应该return true
来自onLongClick
事件。
答案 2 :(得分:16)
确保您为OnClickListener
方法覆盖onClick
。另外,请确保为OnLongClickListener
方法覆盖onLongClick
。并确保您的onLongClick
方法返回true
,因为这将消耗onClick
。
答案 3 :(得分:0)
您可以实现setOnLongClickListener
创建new View.OnClickListener()
或new View.OnLongClickListener()
的实例,如果您创建了Long单击并实现了普通的OnclickListener,则单击激活该方法会出现此错误。
您应该使用new View.OnLongClickListener()
仅捕获长点击