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

时间:2018-10-12 17:18:12

标签: java android listview swipe onfling

我的应用
a ListView。在第二天或前一天向右或向左滑动ListView时,应加载。

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

我的问题
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;
}

2 个答案:

答案 0 :(得分:1)

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

有关如何设置ViewPager的示例,请参见this guidethis guide

答案 1 :(得分:0)

这解决了我的问题:

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

lv.setOnTouchListener(gestureListener);