2014-01-08 56 views
1

我有一个简单的布局:ListView的父视图无法拦截触摸事件

<CustomFrameLayout> 
    <ListView /> 
</CustomFrameLayout> 

在我CustomFrameLayout,我重写:

onInterceptTouchEvent(MotionEvent event); 

,并返回false。在滚动ListView时,onInterceptTouchEvent会收到ACTION_DOWN和第一个ACTION_MOVE事件。然后,ListView似乎接管并且onInterceptTouchEvent无法接收以下ACTION_MOVE事件。

这违背了什么文档指出:

因为只要你从这个函数返回假的,每个下面的事件(直至并包括最终向上)将首先在这里,然后被输送到目标的onTouchEvent()。

http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

我已经调查,要求触摸事件不是在ListView的水平被截获。

requestDisallowInterceptTouchEvent(boolean disallowIntercept) 

这似乎没有任何效果。我应该在ListView单元视图中调用它吗?还有什么我失踪?我正在测试Android 4.4

谢谢。

回答

0

我已决定重写此方法,而不是。在这里,我可以保证我可以拦截所有触摸事件,然后将其分发给子视图并且可能被子视图消费。

dispatchTouchEvents(MotionEvent event); 
+0

你能发送代码示例吗? – eyal

1

你应该onInterceptTouchEvent(MotionEvent event);

true返回true表明您愿意接受进一步的触控式false表明你在哪里没有兴趣进一步行动的行动......

+0

这将阻止ListView接收事件。我只想听取事件而不消耗它们。因此我需要返回false。从onInterceptTouchEvent的文档中读取第3点。 – mdupls

+0

然后你可以从你的CustomFrameLayout手动调度触摸事件到ListView ... –

+0

这是一个选项。我很乐观,认为还有别的可以做的事情或者我错过的东西。我已经更新了这个问题,以包括文档的内容。我想要的行为在文档中明确说明。 – mdupls

相关问题