Android 将TouchEvent发送到Listview之后';被家长截获

Android 将TouchEvent发送到Listview之后';被家长截获,android,listview,touch-event,Android,Listview,Touch Event,我有一个布局,看起来像这样: ViewPager中有许多片段,每个片段都包含一个ListView 现在我想这样做: 通过向下滚动,ListView不能滚动。相反,必须对标题进行转换,使其看起来像本机ActionBar 我通过截取活动根布局中的TouchEvent来实现这一点。 我已经覆盖了父布局的onInterceptTouchEvent()方法,通过检索当前可见的ListView并检查firstVisibleItem是否是第一个并且完全可见,来检查是否应该拦截TouchEvent。 如果应该

我有一个布局,看起来像这样:

ViewPager中有许多片段,每个片段都包含一个ListView

现在我想这样做:

通过向下滚动,ListView不能滚动。相反,必须对标题进行转换,使其看起来像本机ActionBar

我通过截取活动根布局中的TouchEvent来实现这一点。 我已经覆盖了父布局的onInterceptTouchEvent()方法,通过检索当前可见的ListView并检查firstVisibleItem是否是第一个并且完全可见,来检查是否应该拦截TouchEvent。 如果应该拦截TouchEvent,则调用我的自定义OnGesutreListener的onScroll()方法。因此“动画”进度取决于滚动偏移

一切都很好但现在我的问题来了

转换已准备就绪,用户仍向下滚动。作为用户,我希望ListView向下滚动。但是TouchEvent没有发送到ListView,因为它仍然被父布局截获。只有在InterceptTouchEvent上再次上下移动手指后,才会再次调用(现在父布局不需要拦截),并且列表是可滚动的

我尝试了一些方法,但都不适合我:

  • 我试图在中手动调用我的listView的onTouchEvent 父级布局的onTouchEvent()方法-注意
  • 我试图在onScroll方法中手动调用listView的onTouchEvent, 而且这也没有成功
也许你们中的一些人知道如何解决这个问题


非常感谢,格里茨

您是否可以尝试在父onTouchEvent中用手指移动x位置,然后使用

listView.smoothScrollByOffset(int offset);
要滚动列表视图

编辑:根据反馈,应为:

smoothScrollBy((int) distanceY, 1);

多亏了MungoRae的回答,我才明白这一点(请给他投一票!)


这对我来说很好。偏移量是滚动距离,持续时间设置为1毫秒。您可以使用查看。RequestDisallowWinterCeptTouchEvent()。它将启用和禁用视图拦截触摸事件的能力。


触摸时,在父版面上设置RequestDisallowWinterCeptTouchEvent(true),这将使listview能够处理触摸事件。

uuuh。。。听起来很有希望!我现在正在尝试这个方法,让你知道它是有效的:)你的答案没有起作用。但是它帮了我很多:调用ListView的smoothScrollBy((int)distanceY,1)很好!如果你编辑你的答案,我接受:)我想做你做过的事!您是否有一个示例,说明如何重写OnInterceptTouchEvent()方法?
listView.smoothScrollBy(int offset, int durationInMillis)