ListView父视图无法拦截触摸事件

时间:2014-01-08 03:15:20

标签: android listview motionevent

我有一个简单的布局:

<CustomFrameLayout>
    <ListView />
</CustomFrameLayout>

在我的CustomFrameLayout中,我重写:

onInterceptTouchEvent(MotionEvent event);

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

这违背了文档所述的内容:

  

只要你从这个函数返回false,每个后续事件(包括最后一个)将首先在这里传递给目标的onTouchEvent()。

     

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

我已经研究过请求触摸事件不能在ListView级别截获。

requestDisallowInterceptTouchEvent(boolean disallowIntercept)

这似乎没有任何效果。我应该在ListView单元格视图上调用它吗?还有其他我想念的东西吗?我在Android 4.4上测试

感谢。

2 个答案:

答案 0 :(得分:1)

您应该在true

中返回onInterceptTouchEvent(MotionEvent event);

true表示您愿意接受进一步的触摸操作,因为false表示您对进一步操作不感兴趣......

答案 1 :(得分:0)

我决定改用这种方法。在这里,我可以保证在将所有触摸事件发送到子视图并可能被子视图消耗之前,我可以拦截它们。

dispatchTouchEvents(MotionEvent event);