Tengo una ListActivity lo siguiente:ListView Android con OnItemClickListener Y GestureDetector
public class ShowDayActivity extends ListActivity implements OnItemClickListener {
private GestureDetector gestureDetector;
private View.OnTouchListener gestureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.day);
registerForContextMenu(getListView());
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
getListView().setOnItemClickListener(this);
getListView().setOnTouchListener(gestureListener);
}
@SuppressWarnings("static-access")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
return super.onOptionsItemSelected(item);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
...
return super.onContextItemSelected(item);
}
Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
editEvent(pos);
}
class MyGestureDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.d("ICS-Calendar", "Fling left");
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.d("ICS-Calendar", "Fling right");
return true;
}
return false;
}
}
}
El contextListener (a largo clic) en los ListItems funciona perfectamente. Hoy agregué el gestureListener y Detector, que también funciona, PERO:
El GestureDetector detecta un fling bien, pero después de que se hace con su lógica, se abre el menú contextual, que obviamente no es lo que quiero. ¿Alguna idea de lo que estoy haciendo mal, o qué podría hacer al respecto?
fresca llamada alternativa si usted no tiene EV2: list.onTouchEvent (MotionEvent.obtain (0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); –