Ejercicio Básico D: Creación de opciones en el Menú contextual de un ListActivity
A. Descripción
El ejercicio consistirá en crear dos opciones en el menú contextual de la lista de una aplicación de Android, las cuales nos permitan añadir y eliminar elementos de la lista. Al realizar una pulsación larga sobre un elemento de la lista, podremos eliminar dicho elemento,
o insertar a continuación de dicho elemento.
Los menús contextuales son aquellos menús que aparecen dependiendo del contexto
que tengas en la aplicación. Por ejemplo, vamos a ver un caso donde podemos mostrar un menú contextual cuando se realiza una pulsación prolongada sobre un ítem de una lista.
B. Descripción
Para mostrar un menú contextual lo primero que tendremos que hacer es registrar el
propio menú en la vista, para que se pueda utilizar. Así, en el método onCreate(), insertamos el siguiente código, donde el ListView será sobre el que queremos utilizar el menú contextual.
registerForContextMenu(ListView);
Para crear el menú contextual, debemos sobreescribir el método onCreateContextMenu(), y añadir las opciones posibles al menú mediante el método add(). Y para obtener la opción sobre la que se seleccionó, utilizamos el método onContextItemSelected(), obteniendo el ID de la opción seleccionada.
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, EDIT_ID, 0, "Edit");
menu.add(0, DELETE_ID, 0, "Delete");
}
public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info =
(AdapterContextMenuInfo)item.getMenuInfo();
switch (item.getItemId()) {
case EDIT_ID: editNote(info.id); return true;
case DELETE_ID:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
La ejecución del ejercicio debería quedar de la siguiente manera:
C. Pasos a seguir
1. Cargar el código del proyecto Ejercicio Basico D - Menus contextuales –> Inicio
2. Registrar el menú contextual en el ListView de la ListActivity.
NOTA: getListView().
3. Crear las constantes identificadoras de las opciones del menú contextual (Menu_ADD,
MENU_DEL).
4. Sobreescribir el método onCreateContextMenu(), y añadir las opciones posibles al menú mediante el método add().
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
menu.add (Menu.NONE, MENU_ADD, Menu.NONE, "Añadir elemento");
.. .. ..
}
5. Sobreescribir el método onContextItemSelected(), y obtener el Adapter para conseguir la posición seleccionada. Y a continuación realizar las opciones adecuadas para eliminar el elemento seleccionado.
public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info =
(AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case MENU_ADD:
…
return true;
case MENU_DEL:
… //info.position tiene la posición
return true;
}
return super.onContextItemSelected(item);
}
6. Para insertar a continuación del elemento seleccionado, debemos tener una variable global donde guardar dicha posición una vez seleccionada, y que el diálogo inserte el elemento nuevo en la siguiente posición. Así, debemos modificar la inserción add() que teníamos en el método onCreateDialog().