Deshabilitar el clic largo para encabezados (o pies de página) en un ListView

Mi pregunta es similar a esta: ListView: deshabilitar hacer clic / enfocar

Sin embargo, no quiero deshabilitar el onClick predeterminado, solo el clic largo. He registrado mi ListView para la creación del menú contextual y quiero deshabilitarlo para un elemento de encabezado (o al menos cambiar su comportamiento). ¿Cómo haría esto?

¡Gracias!

preguntado el 09 de enero de 11 a las 07:01

3 Respuestas

¡Lo averigué! No era obvio que menuInfo fuera necesariamente un AdapterContextMenuInfo (que tiene posición).

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if (((AdapterContextMenuInfo)menuInfo).position == 1) {
        inflater.inflate(R.menu.foo1, menu);
        return;
    }
    inflater.inflate(R.menu.foo2, menu);
}

Respondido el 09 de enero de 11 a las 16:01

No lo he probado, pero puede funcionar.

ListView extiende ViewGroup, por lo que cuando se hace un clic largo en un ListView, se debe pasar al oyente qué vista secundaria se encuentra bajo el clic largo.

Cree su propia clase ListView que implemente onLongClickListener, luego verifique si la Vista es su Encabezado o Pie de página y, si es así, devuelva 'verdadero' para mostrar que el clic largo ha sido 'consumido' y para indicar que no se deben realizar más acciones tomado.

protected MyListView extends ListView
    implements onLongClickListener {

    public boolean onLongClick (View v) {
        boolean longClickConsumed = false;

        // Check if v is either your Header or Footer
        // if so then set longClickConsumed to be true

        return longClickConsumed;
    }
}

Respondido el 09 de enero de 11 a las 12:01

Esta historia de La respuesta es casi buena, el problema con eso es que el clic largo no se cancela, solo tiene un comportamiento alternativo. Además, no hacer nada confundirá al usuario, ya que la interfaz de usuario actuará como si hubiera un clic largo pero no pasaría nada.

La solución es muy simple.

  1. Deshabilite el clic regular y el clic largo agregando el encabezado / pie de página con esa función listView.addFooterView(footer, null, false);
  2. Configure el oyente al hacer clic manualmente en el encabezado / pie de página

contestado el 23 de mayo de 17 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.