Android abrir ContextMenu en un clic corto + pasar elemento hecho clic en detalles

lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView text = (TextView) view.findViewById(R.id.btitle); registerForContextMenu(text); view.showContextMenu(); } }); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); TextView text = (TextView) v.findViewById(R.id.btitle); CharSequence itemTitle = text.getText(); menu.setHeaderTitle(itemTitle); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } 

Hola,

Estoy intentando abrir un contextMenu con un clic de artículo corto. He conseguido hacerlo sólo si agrego registerForContextMenu(getListView()); En algún lugar pero esto también desencadena contextMenu en el clic largo (que no quiero que suceda).

  • Probado view.showContextMenu() pero no hace nada a menos que agregue el registerForContextMenu(getListView()); .
  • Intentó registrar primero el elemento que había hecho clic y luego llamar al showContextMenu() pero no hizo nada tan bien …

Además, quiero obtener el ícono de la imagen del elemento + texto para poder usarlos en el contextMenu.

Apreciar la ayuda!

Yo era capaz de abrir un menú contextual en el botón de clic con el siguiente código:

 public void onButtonClickEvent(View sender) { registerForContextMenu(sender); openContextMenu(sender); unregisterForContextMenu(sender); } 

Simplemente establezca la propiedad onClick del botón en onButtonClickEvent. Un clic largo no activará el menú contextual, ya que no está registrado justo después de que se muestre.

Respecto a la apertura de un menú contextual con un breve clic:

Las otras soluciones publicadas aquí no funcionaron para mí porque estaba utilizando un ListFragment. Sin embargo, la siguiente solución parece funcionar muy bien tanto para ListFragment como para ListActivity (o cualquier lista antigua en general):

 public void onListItemClick(ListView l, View v, int position, long id){ l.showContextMenuForChild(v); } 

Es mucho más simple y elegante. De hecho, esto es realmente cómo la clase ListView inicia el menú contextual en un clic largo.

Solución:

 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; long itemID = info.position; menu.setHeaderTitle("lior" + itemID); } 

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;

Le da más detalles sobre el elemento de la lista que ha hecho clic. A continuación, puede utilizar info.id, info.position y así sucesivamente para recuperar los detalles y utilizar las acciones (editar, eliminar …).

En mi caso tuve BaseAdapter e implementado haga clic en el botón para cada elemento listView (en el método getView):

 ImageButton menuBtn = (ImageButton) convertView.findViewById(R.id.itemListMenu); menuBtn.setOnClickListener(new android.view.View.OnClickListener() { public void onClick(View v) { parent.showContextMenuForChild(v); } }); 

Creo que si agregas un OnLongClickListener a la vista, deberías poder evitar que muestre el menú contextual en un clic largo.

En onItemClick, el parámetro view es la vista del elemento, por lo que debería ser capaz de obtener ImageViews o TextViews desde que:

 view.findById(R.id.my_image_view); 

Mi solución:

  mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mListView.showContextMenuForChild(view); } }); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.