Android:为什么长按也会触发正常点击?


126

我有一个ListView,带有用于长按和常规单击的侦听器。

为什么当我长按列表项时,常规点击事件也会被调用?

对于不同的点击,我需要具有两个单独的功能。

Answers:


284

来自事件监听器

onLongClick() -这将返回一个布尔值,以指示您是否已经消费了该事件,并且不应继续进行下去。也就是说,返回true表示您已经处理了该事件,应该在此处停止;如果尚未处理,则返回false,并且/或者该事件应继续进行任何其他单击的侦听器。

要退trueonLongClick()和仍然得到正常的单击事件?

编辑添加:对于ListView,您可能正在使用OnItemLongClickListener。在onItemLongClick()那里使用了类似的布尔返回值来表明是否消耗的事件。


1
要设置该myListView.setOnItemLongClickListener(this); 选项,您必须覆盖public boolean onItemLongClick(...)。在这里,您只需要return true指示LongClick已被激活并将在常规点击时取消触发即可。如果您返回false,则也会触发常规点击。
布兰登2015年

那其他情况又如何呢,当我需要区别长按和普通点击以采取行动时
Muhammed Refaat

@erichamion我尝试过您的解决方案来解决类似问题,但没有运气。我非常感谢您可以在此处提供的任何见解或想法:stackoverflow.com/questions/47783631/…–
AJW

49

用更简单的术语重述答案:

鉴于:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return true表示事件已消耗。处理。没有其他点击事件将被通知。
  • return false表示事件未使用。其他任何点击事件将继续接收通知。

因此,如果您不想onClick在之后也被触发onLongClick,那么您应该return true从该onLongClick事件开始。


2
超级完美的答案,如果我们输入真值,则仅处理长按;如果我们输入假,则单击和长按事件会立即发生
Pir Fahim Shah

极好的答案。
陈山姆

20

确保您要重写OnClickListener您的onClick方法。还要确保您要重写OnLongClickListener您的onLongClick方法。并确保您的onLongClick方法返回true,因为这将消耗onClick


我在onLongClick方法中添加了true,但是仍然存在一个问题,就是我的onClick方法此后不会触发。我将不胜感激任何关于如何解决的想法或想法,位于: stackoverflow.com/questions/47783631/…–
AJW

0

您可以实现setOnLongClickListener创建new View.OnClickListener()或的实例new View.OnLongClickListener(),如果创建了Long单击并实现了常规的OnclickListener,则单击激活该方法时将出现此错误。您应该new View.OnLongClickListener()只用于捕获长点击

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.