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