En esta 1ª Parte veremos como podemos colocar un menú contextual simplemente manteniendo pulsado un TextView que tendremos en nuestro layout.
Pasos:
1 - Una vez hayamos reconocido el TextView tenemos que asociar el menú contextual a dicho TextView. Esto se realiza en el método OnCreate, y se lleva a cabo con el siguiente método:
registerForContextMenu(lblMensaje);
donde lblMensaje es el TextView del que hemos hablado antes.
2 - A continuación tenemos que crear un xml con las opciones que contendrá nuestro menú. Se debe crear en la carpeta "res->menu", y nosotros lo llamaremos "menu_contextual.xml".
Tendrá esta forma:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/CtxLblOpc1"
android:title="Eliminar">
</item>
<item
android:id="@+id/CtxLblOpc2"
android:title="Comprado">
</item>
</menu>
Cada "<item>" será una opción que aparecerá. Debemos de darle un id y un nombre.
3 - Después tenemos que activar los menús contextuales. Para ello tenemos que sobreescribir el método "onCreateContextMenu".
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
}
Lo que hacemos es crearnos un "inflater" y con él podemos activar nuestro menú contextual: "menu_contextual".
4 - Por último tenemos que manejar los clicks sobre cada opción. Con el método "onContextItemSelected" podemos hacerlo de forma muy parecida a como siempre hemos realizado de forma normal el "OnClick" de un "OnClickListener":
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.CtxLblOpc1:
lblMensaje.setText("Etiqueta: Eliminar pulsada!");
return true;
case R.id.CtxLblOpc2:
lblMensaje.setText("Etiqueta: Comprado pulsada!");
return true;
default:
return super.onContextItemSelected(item);
}
}
Y con esto ya tendremos listo nuestro menú contextual! Espero que os sea de utilidad y que lo programéis en vuestras apps.
En cualquier caso, si lo que queremos es hacer que se muestre el menú contextual, por ejemplo, cuando mantengamos pulsado sobre una lista lo único que tenemos que cambiar es el "registerForContextMenu", pasándole la lista.
Además, un dato curioso a la vez que útil es la forma de detectar sobre qué item de la lista hemos mantenido pulsado para que apareciese el menú contextual.
Con escribir lo siguiente podemos solventar este pequeño inconveniente:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
Esta línea de código debe ir dentro del método que maneja las acciones al pulsar las opciones del menú contextual (onContextItemSelected).
Gracias a la variable "info" que acabamos de crear podemos tener acceso a:
- targetView : vista objetivo
- position : posición del item de la lista pulsado
- id : el id del item pulsado
Por último, aquí tenéis el ejemplo. Además dentro de él podéis encontrar información sobre un tutorial que trata de lo mismo ;).
No hay comentarios:
Publicar un comentario