【问题标题】:Android: Why does long click also trigger a normal click?Android:为什么长按也会触发正常点击?
【发布时间】:2011-07-22 15:13:21
【问题描述】:

我有一个 ListView,其中包含长按和常规单击的侦听器。

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

我需要为不同的点击设置两个单独的函数。

【问题讨论】:

    标签: android events listview onlongclicklistener


    【解决方案1】:

    来自Event Listeners

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

    您是否从您的 onLongClick() 返回 true 并且仍然获得正常的点击事件?

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

    【讨论】:

    • 要设置myListView.setOnItemLongClickListener(this); 选项,您必须覆盖函数public boolean onItemLongClick(...)。在这里,您只需要return true,这表明LongClick 已激活,并将取消常规点击的触发。如果您返回 false,那么它也会触发常规点击。
    • 那另一种情况呢,当我需要区分长按和正常点击来采取行动时
    • @erichamion 我尝试了类似问题的解决方案,但没有运气。感谢您提供任何见解或想法,位于此处:stackoverflow.com/questions/47783631/…
    【解决方案2】:

    用更简单的方式重述答案:

    给定:

    @Override
    public boolean onLongClick(View view) {
    
        return true; // or false
    }
    
    • return true 表示事件被消费。它被处理。不会通知其他点击事件。
    • return false 表示该事件未被消费。任何其他点击事件都将继续收到通知。

    因此,如果您不希望在onLongClick 之后也触发onClick,那么您应该在onLongClick 事件中触发return true

    【讨论】:

    • 如果我们输入真值,那么它只处理长按,如果我们输入假,那么它只处理长按,然后点击和长按事件同时发生
    【解决方案3】:

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

    【讨论】:

    • 我在 onLongClick 方法中添加了 true,但仍然存在问题,即我的 onClick 方法此后不会触发。我将不胜感激有关如何解决的任何想法或想法,位于此处:stackoverflow.com/questions/47783631/…
    【解决方案4】:

    你可以实现setOnLongClickListener创建new View.OnClickListener()new View.OnLongClickListener()的实例,如果你创建一个长按并实现一个普通的OnclickListener你会得到单击激活方法的这个错误。 你应该使用new View.OnLongClickListener() 来捕捉长点击

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多