2009-08-27 22 views
6

Tengo una aplicación para Android con ListActivity en la vista principal. La lista contiene un LinearLayout con un TextView y un botón de eliminación oculto. El botón Eliminar estará oculto por defecto. Quiero usar un gesto arrojadizo para mostrar el botón. Puedo detectar el gesto arrojado gracias a la pregunta # 937313 en stackoverflow. No tengo claro cómo determinar qué elemento de la lista se lanzó, ya que el oyente onTouch escucha el ListView. El elemento no se selecciona necesariamente, por lo que los métodos getSelected * no se pueden usar de manera confiable. Estoy usando el SimpleListAdaptor por lo que no tengo acceso directo a los objetos de vista en el ListView.Cómo manejar mejor el gesto fling para Android ListActivity

¿Alguna idea?

Respuesta

14

Pruebe usar AbsListView.pointToPosition() para determinar el elemento de la lista para la coordenada X, Y en la vista de lista.

Si está utilizando la receta de # 937313, usted debería ser capaz de anular onFling() más o menos de la siguiente manera:

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    try { 
     Toast.makeText(listAdapter.getItem(listView.pointToPosition((int) e1.getX(), (int) e1.getY()).toString()); 
     return super.onFling(); 
    } catch(Exception e) { 
     // do nothing 
    } 
} 
+2

* pointToPosition() * toma int y no flotan como argumentos a fin de utilizar * Matemáticas .round (e1.getX()), Math.round (e1.getY()) * en lugar de usar directamente * e1.getX(), e1.getY() * – FreewheelNat

Cuestiones relacionadas