在ViewPager中滑动ListView?

时间:2018-04-28 05:24:45

标签: android listview android-viewpager swipe

我知道这是一个广泛的问题,我搜索了很多,也在StackOverflow上我试图找到一个解决方案,但没有找到我想要的,或者解决方案没有用。

我的ViewPager里面有listView。现在我想要的是listView可以刷卡,无论我的viewPager是什么,所以当我滑动listView时,我可以决定做一些其他事情,而不是刷到新的View。我将SwipeListener设置为我的listView,如下所示:

public class OnSwipeTouchListener implements OnTouchListener {
private final GestureDetector gestureDetector;

protected OnSwipeTouchListener(Context ctx) {
    gestureDetector = new GestureDetector(ctx, new GestureListener());
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

public void onSwipeRight() {
}

public void onSwipeLeft() {
}

public void onSwipeTop() {
}

public void onSwipeBottom() {
}

private final class GestureListener extends SimpleOnGestureListener {
    private static final int SWIPE_THRESHOLD = 23;
    private static final int SWIPE_VELOCITY_THRESHOLD = 0;

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        boolean result = false;
        try {
            float diffY = e2.getY() - e1.getY();
            float diffX = e2.getX() - e1.getX();
            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffX > 0) {
                        onSwipeRight();
                    } else {
                        onSwipeLeft();
                    }
                    result = true;
                }

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

fragment内:

OnSwipeTouchListener onSwipeTouchListener = new OnSwipeTouchListener(context) {
        public void onSwipeRight() {

        }

        public void onSwipeLeft() {

        }
    };
listView.setOnTouchListener(onSwipeTouchListener);

但这并不能使listView可以刷卡。我使用了测试点并且理解不调用onFling()方法。此外,虽然调用了onDown()方法,但更改其返回值并不会改变我的`listView的任何行为。那诀窍是什么?

0 个答案:

没有答案