当父视图有触摸监听器时处理点击事件

Handle click events when parent view has a touch listener

我有一个 ListView,用户可以在其中轻扫和关闭项目。为了实现滑动关闭,我为列表视图设置了一个触摸监听器。

我也想处理对列表视图中每个项目的点击。但是,如果我为这些项目设置一个点击监听器,滑动关闭将不起作用。这应该是由于每个项目都处理触摸事件而不是将它们传递给容器 ListView。

有人可以建议一种方法,让我可以在不中断滑动关闭的情况下拦截项目上的点击事件吗?

The GestureDetector is attached to the ListView via an OnTouchListener, and the OnClickListener is set on the individual list items--which are child views of the ListView


这里的问题是 Listview 和所有 ViewGroup 如何处理触摸顺序。
ViewGroup 将触摸事件传递给它的子视图,然后当且仅当 没有子视图使用该事件时 由它自己直接处理。带有 OnClickListener 的子视图将始终消耗触摸事件,因此您的 GestureDetector 永远不会看到任何事件。
最简单和最快的解决方案是使用 一个单一的 GestureDector 来控制它们 (LOTR 粉丝会开玩笑哈哈)并处理滑动和点击。并将列表视图中的每个项目设置为消费者而不是列表视图本身。

看看 here 另一个有效的解决方案

如果用户没有达到特定的移动阈值,您可以在 ACTION_UP 上使用 listView.performClick()