2

我想使用ListView包含自定义视图的(并且之前已经成功完成此操作)。基本上这些自定义视图是垂直滑块,显然与ListView. 我用来自 的自定义视图填充它Adapter,它们会对项目上的触摸做出反应,但是一旦我的手指移动超过几个像素,它就会滚动,并且自定义视图将不再接收任何触摸事件。

ListView当我触摸自己的组件时,如何(很好地)防止滚动?

我可以以某种方式禁用ListView选择,并将触摸转发到项目,但仍使用滚动行为吗?

先感谢您。

4

2 回答 2

8

为了防止列表视图的滚动,您可以按如下方式在触摸侦听器上实现

listView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction()==MotionEvent.ACTION_MOVE)
            {
                return true;
            }
            return false;
        }
    });

希望它会起作用,如果它对您有用,请投票

于 2013-03-07T05:03:16.737 回答
1

您可以截取onInterceptTouchEvent()在您的根布局中使用的所有触摸事件(包含ListView,如 a FrameLayout),如此所示。

你在那里做的是捕获运动事件(当 aMotionEvent.ACTION_DOWN进来时返回 true),捕获下面的事件onTouchEvent(),决定运动是针对列表项还是列表本身,并相应地调度事件。

不要指望这很容易。了解运动事件的流程以及它们之间的交互onInterceptTouchEvent()onTouchEvent()具有挑战性的,并且使其更加有效。但我相信这是解决您的问题的可行方法。

于 2013-03-05T14:22:55.487 回答