2014-02-03 4 views
1

У меня есть GridView, который реализовал onItemclickListener, а также onfling. Проблема в том, что я делаю fling (проведите по экрану слева направо), он отлично работает, но itemclick событие GridView всегда получает неправильную позицию (позиция всегда показывает самый первый элемент строки щелкнутого элемента). Как преодолеть эту проблему? Помогите мне найти, пожалуйста. Спасибо за ваше время^_^ Это код onFling:Grid view дает неправильное положение

@Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     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(); 
        } 
       } 
      } else { 
       if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffY > 0) { 
         onSwipeBottom(); 
        } else { 
         onSwipeTop(); 
        } 
       } 
      } 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 

     return super.onFling(e1, e2, velocityX, velocityY); 
    } 

Это код ItemClickListener

gridview.setOnItemClickListener(new OnItemClickListener() { 
public void onItemClick(AdapterView<?> parent, View v, 
    int position, long id) { 
      Log.i("clicked", position+""); 

      ((CalendarAdapter) parent.getAdapter()).setSelected(v); 
      String selectedGridDate = CalendarAdapter.dayString 
        .get(position); 
      String[] separatedTime = selectedGridDate.split("-"); 
      String gridvalueString = separatedTime[2].replaceFirst("^0*", 
        ""); 
      int gridvalue = Integer.parseInt(gridvalueString); 
      // navigate to next or previous month on clicking offdays. 
      if ((gridvalue > 10) && (position < 8)) { 
       setPreviousMonth(); 
       refreshCalendar(); 
      } else if ((gridvalue < 7) && (position > 28)) { 
       setNextMonth(); 
       refreshCalendar(); 
      } 

((CalendarAdapter) parent.getAdapter()).setSelected(v); 

     } 
    }); 
+0

Возможно, дубликат: http://stackoverflow.com/questions/7238855/gridview-with-a-baseadapter-onitemclick-giving-wrong-position – tobidude

ответ

0

попробовать это он даст вам точное положение, например Log.i (» clicked ", (position- gridview.getFirstVisiblePosition()) +" ");

Смежные вопросы