2012-01-29 17 views
6

Parece que la onCreateContextMenu insn't ser llamado en absoluto. En mi onCreate para mi ListActivity tengo:onCreateContextMenu no está siendo llamado

list = getListView(); 
registerForContextMenu(list); 

(Sé que es redundante, y yo he pasado getListView() con los mismos resultados).

Aquí es mi onCreateOntextMenu;

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    Log.d("LM", "onCreateContextMenu"); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_landmarks, menu); 
} 

El registro nunca se genera. ¿Alguien tiene alguna sugerencia?

+0

Simplemente páselo a otros, también estaba agregando un onItemLongClickListener a la vista. Ahora tengo sentido por qué eso no va a funcionar. – spuppett

Respuesta

8

Mi pensamiento es ListView interceptando el evento y no entrar en el comportamiento contextMenu. Tiene sentido para mí porque el comportamiento OnItemLongClickListener se superpone a contextMenu. Si no, ¿cómo puede reconocer entre contextMenu y OnItemLongClickListener?

+0

Eso es lo que encontré también. Después de volver al código para mostrar que el clic largo funcionaba, me llamó la atención. – spuppett

+0

sí ... ¡Eso funciona! Gracias. – Shyam

-2

usted tiene que llamar registerForContextMenu(View view) método en el onCreate(Bundle savedInstanceState).

0

Trate de localizar registerForContextMenu (list); como último método para llamar al método onCreate. Quiero decir que se debe llamar a este método después de llamar al adaptador de lista no antes.

0

Basta con retirar youwidget.setonLongclicklistener y yourwidget.setLongClickable

y luego añadir registerforContextmenu(yourwidget) en onCreate() a continuación, agregar código de acuerdo con el widget utilizado.

Espero que sea útil.

0

Mi problema se relaciona muy estrechamente con la respuesta de lulumeya, que me señaló en la dirección correcta. He hecho menús contextuales muchas veces antes y de alguna manera nunca me encontré con esto hasta ahora.

Estaba llamando View.setOnClickListener(listener) en Adapter.getView(...) cuando debería ser ListView.setOnItemClickListener(listener) para evitar conflictos con el menú contextual.

En general, estoy seguro de que OnItemClickListener está más optimizado, especialmente porque solo se utiliza una instancia de escucha en lugar de crear una nueva instancia cada vez que se crea o recicla una vista.

0

tuve ese problema y sólo podía resolverlo, asegurando

  1. que debido a la resp. La actividad registró las Vistas, la misma Actividad también debe anular onCreateContextMenu(); haciendo esto en un Fragmento no funcionará
  2. desde que utiliza un fragmento adicional de crear el adaptador (y registrar con él) el fragmento no debe anular la actividad onContextItemSelected().

Estoy considerando abandonar la ventana emergente de la pantalla larga a favor de un botón estilo Youtube en el margen derecho de las tarjetas mostrando un menú que no desvanece todo al fondo --- ¿cuál es el término de búsqueda para ese por cierto?

Cuestiones relacionadas