проведите ListView внутри ViewPager? - PullRequest
0 голосов
/ 28 апреля 2018

Я знаю, что это довольно широкий вопрос, и я много гуглил, также в 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. Так в чем же подвох?

...