2015-06-03 2 views
1

Итак, у меня есть макет, который составлен из GridView, и я хочу добавить OnTouchListener, чтобы обработать событие, когда пользователь переместится влево или вправо, поэтому я создал класс, который реализует OnTouchListener, это называется OnSwipeTouchListener, и он работает очень хорошо, но проблема это мой gridView, прокрутка работает нормально и все, но когда я нажимаю на элемент, он автоматически выбирает первый элемент в строке. любая идея о том, как исправить тот или иной способ обнаружения левого или правого салфетки и делает работу сетки прекрасной, спасибо.Как добавить OnTouchListener в gridView?

P.S: gridView отлично работает, когда я удаляю onTouchListener.

OnSwipeTouchListner:

public class OnSwipeTouchListener implements OnTouchListener { 

private final GestureDetector gestureDetector; 

public OnSwipeTouchListener(Context context) { 
    gestureDetector = new GestureDetector(context, new GestureListener()); 
} 

public void onSwipeLeft() { 
} 

public void onSwipeRight() { 
} 

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

private final class GestureListener extends SimpleOnGestureListener { 

    private static final int SWIPE_DISTANCE_THRESHOLD = 100; 
    private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

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

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     float distanceX = e2.getX() - e1.getX(); 
     float distanceY = e2.getY() - e1.getY(); 
     if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
      if (distanceX > 0) 
       onSwipeRight(); 
      else 
       onSwipeLeft(); 
      return true; 
     } 
     return false; 
    } 
} 
} 

назвав его в основной деятельности:

gridView.setOnTouchListener(new OnSwipeTouchListener(this){ 
     public void onSwipeRight() { 
     } 
     public void onSwipeLeft() { 
      } 
    }); 
+0

вы могли бы разместить свой код – 3xplore

+0

@ r7v Я редактировал мой вопрос –

ответ

0

Попробуйте использовать setOnItemClickListener

gridView.setOnItemClickListener(

new OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 

    } 
}); 
); 
Смежные вопросы