为什么 onFling() 在 ListView 中不起作用?

Why is onFling() not working in ListView?

我的应用程序
显示 ListView。向右或向左滑动时,应加载下一天或前一天的 ListView

我的解决方案
我尝试使用 onFling() 方法来检测向左或向右滑动。如果我在 ListView 上方的 TextView 上滑动,效果很好。

我的问题
ListView 上滑动不会触发 onFling() 方法。可能是因为我的 ListView 是可滚动的。关于如何解决这个问题的任何想法?

OnFling()

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 100;
GestureDetector gestureDetector;


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

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    boolean result = false;
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        // right to left swipe
        if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            Toast.makeText(this, "Right   to Left swipe", Toast.LENGTH_SHORT).show();
            result = true;

        } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //left to right swipe
            Toast.makeText(this, "Left to Right swipe", Toast.LENGTH_SHORT).show();
            result = true;
        }

} catch (Exception e) {
    e.printStackTrace();
}
    return result;
}

这听起来像是 ViewPager 的理想用例,它用于在同一片段的不同实例之间左右滑动。 ViewPager 会为您处理所有手势。

有关如何设置 ViewPager 的示例,请参阅 this guide and this guide

这解决了我的问题:

gestureListener = new View.OnTouchListener(){
        public boolean onTouch(View v, MotionEvent event){
            return gestureDetector.onTouchEvent(event);
        }
    };

lv.setOnTouchListener(gestureListener);