Android: ¿Por qué el clic largo también activa un clic normal?

126

Tengo un ListView con oyentes para un clic largo y un clic normal.

¿Por qué, cuando mantengo presionado un elemento de la lista, también se llama al evento de clic normal?

Necesito tener dos funciones separadas para los diferentes clics.

mellowg
fuente

Respuestas:

284

De los oyentes de eventos :

onLongClick () : devuelve un valor booleano para indicar si ha consumido el evento y no debe continuar. Es decir, devuelva verdadero para indicar que ha manejado el evento y que debería detenerse aquí; devuelva falso si no lo ha manejado y / o el evento debe continuar a cualquier otro oyente al hacer clic.

¿Regresa truede su onLongClick()y sigue recibiendo el evento de clic normal?

Editado para agregar : para un ListView, puede estar usando OnItemLongClickListener. El onItemLongClick()no utiliza un valor de retorno booleano similares para indicar si se consume el evento.

erichamion
fuente
1
Para configurar la myListView.setOnItemLongClickListener(this); opción, deberá anular la función public boolean onItemLongClick(...). Aquí simplemente necesita lo return trueque indica que LongClick se activó y cancelará el disparador con el clic normal. Si devuelve falso, también activará el clic normal.
Brandon
¿qué pasa con la otra situación, cuando tengo que diferir entre el largo clic y clic normales para tomar medidas de acuerdo con que
Muhammed Refaat
@erichamion Probé su solución para un problema similar, sin suerte. Apreciaría cualquier idea o pensamiento que pueda proporcionar, ubicado aquí: stackoverflow.com/questions/47783631/…
AJW
49

Reestableciendo la respuesta en términos más simples:

Dado:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return truesignifica que el evento se consume. Se maneja Ningún otro evento de clic será notificado.
  • return falsesignifica que el evento no se consume. Cualquier otro evento de clic continuará recibiendo notificaciones.

Entonces, si no desea onClickque se active también después de un onLongClick, entonces debe hacerlo return truedesde el onLongClickevento.

Suragch
fuente
2
Respuesta súper perfecta si ponemos el valor verdadero, entonces solo maneja el clic largo si ponemos falso, entonces el evento de clic y presión larga ocurre a la vez
Pir Fahim Shah
Excelente respuesta
Sam Chen
20

Asegúrate de anular OnClickListenertu onClickmétodo. También asegúrese de anular OnLongClickListenersu onLongClickmétodo. Y asegúrese de que su onLongClickmétodo regrese true, ya que esto consumirá el onClick.

Alex Lockwood
fuente
Agregué verdadero en mi método onLongClick pero todavía tengo un problema porque mi método onClick no se activa a partir de entonces. Agradecería cualquier idea o idea sobre cómo resolver, ubicada aquí: stackoverflow.com/questions/47783631/…
AJW
0

Puede implementar la setOnLongClickListenercreación de una instancia de new View.OnClickListener()o new View.OnLongClickListener(), si crea un clic largo e implementa un OnclickListener normal, obtendrá estos errores de un solo clic activando el método. Debe usar new View.OnLongClickListener()para capturar solo clics largos

Matheus Padovani
fuente