Los elementos de ListView no se pueden hacer clic después de establecer el oyente de clics en getView ()

He buscado alrededor y no han salido con una solución (tal vez no usando las palabras clave correctas).

Así, tengo un ListView personalizado que su artículo se puede arrastrar alrededor cuando el artículo hace clic largo. Dentro de su elemento, hay un ImageView y LinearLayout que contiene dos TextViews. Las acciones se realizan cuando se hace clic en LinearLayout o ImageView.

Para ello, he utilizado setOnItemLongClickListener en mi DragListView que extiende ListView, para iniciar la acción de arrastrar, y onInterceptTouchEvent para gestionar la acción de arrastrar.

Entonces, he construido un adaptador personalizado que extiende BaseAdapter y overrided su getView () para implementar los elementos secundarios en la fila. El LinearLayout y ImageView han sido setOnClickListener.

El problema es, el LinearLayout y ImageView son capaces de hacer sus cosas, pero el onItemLongClick no se llama.

El oyente dentro getView ();

holder.delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Do something } 

Para el artículo haga clic largo (arrastre iniciador)

 setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { //Do something } 

¡Muchas gracias!

Creo que un detector de gestos es una de las maneras de manejar eventos. Normalmente, sin embargo, se utiliza un detector de gestos cuando queremos detectar un gesto y no una pulsación prolongada.

La razón por la que onItemLongClick no se llama es que onClickListener puede consumir un evento de toque. En esa razón, si desea manejar onItemLongClick, interceptar evento táctil y enviarlo a las vistas que desea manejar.

Puede encontrar más detalles en el siguiente enlace. http://developer.android.com/guide/topics/ui/ui-events.html

Ok, acaba de descubrir la solución a mí mismo. En lugar de usar onItemLongClickListener, creo un detector de gestos para detectar la presión prolongada. A continuación, reemplazo dispatchTouchEvent y forzar a buscar primero la pulsación larga, luego devolver super.dispatchTouchEvent y los siguientes eventos táctiles. ¡Sugerencias aún son bienvenidas!

  • Fragmento tiene el fondo blanco por defecto en replace () en lugar de uno transparente
  • Sólo en algunos teléfonos, ListView no se actualiza después de notifyDataSetChanged ()
  • Cómo actualizar la lista del cajón de navegación tan pronto como su abrir / cerrar en Android
  • Android: Actualizar ListView en la primera actividad al regresar de la segunda actividad
  • Android: ListView vertical con filas superpuestas
  • Actualización de datos de Json analizados en Listview
  • Anulación de Android ListView onItemClick haciendo que el elemento se seleccione (marcado)
  • Android -El contenido del adaptador ha cambiado pero ListView no recibió una notificación
  • Android ListView no resalta cuando se establece OnClickListener
  • Vista de lista Scroll Not Smooth
  • Cómo agregar secciones separadores / divisores a un ListView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.