Android ListView:不执行覆盖原因滚动

Android ListView:不执行覆盖原因滚动,android,listview,scroll,overriding,Android,Listview,Scroll,Overriding,我想知道用户是向上还是向下滚动。 我已经开始覆盖OnGetureListener.onScroll()方法,并为ListView设置我的GestureDetector public class ContactList extends ListView { GestureDetector gestureDetector; public ContactList(Context context) { super(context); initView(

我想知道用户是向上还是向下滚动。 我已经开始覆盖
OnGetureListener.onScroll()
方法,并为
ListView
设置我的
GestureDetector

public class ContactList extends ListView {

    GestureDetector gestureDetector;

    public ContactList(Context context) {
        super(context);
        initView();
    }

    public ContactList(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView();
    }

    public ContactList(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private void initView() {
        gestureDetector = new GestureDetector(new SimpleOnGestureListener() {
            public boolean onScroll(MotionEvent firstEvent, MotionEvent secondEvent, float distanceX, float distanceY) {
                Log.d("tag", "onScroll "+firstEvent.getAction());
                Log.d("tag", "onScroll "+secondEvent.getAction());
                return true;

            };
        });

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
}
调试时,我注意到它是从onTouchEvent()传递的,而不是从onScroll()传递的,并且滚动不再由
列表视图执行

public class ContactList extends ListView {

    GestureDetector gestureDetector;

    public ContactList(Context context) {
        super(context);
        initView();
    }

    public ContactList(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView();
    }

    public ContactList(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private void initView() {
        gestureDetector = new GestureDetector(new SimpleOnGestureListener() {
            public boolean onScroll(MotionEvent firstEvent, MotionEvent secondEvent, float distanceX, float distanceY) {
                Log.d("tag", "onScroll "+firstEvent.getAction());
                Log.d("tag", "onScroll "+secondEvent.getAction());
                return true;

            };
        });

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
}
我做错了什么


谢谢

您是否尝试过在
onTouchEvent
方法中调用
super.onTouchEvent(event)

Edit-我想您也希望在
onScroll
方法中返回
false

那么您的
ontochevent
方法应该是:

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (gestureDetector.onTouchEvent(event)) {
        return true;
    }
    return super.onTouchEvent(event);
}

杰出的在
onScroll()
中返回
false
表示事件未被使用,因此
onTouchEvent()
可以将事件转发到超类。它起作用了。非常感谢!:)