Crear un ContextMenu en Android

Crear un ContextMenu en Android

Realizaremos un ContextMenu en Android (un menú contextual) que aparece al hacer una pulsación larga y que elimina elementos de un ListView 

Deseamos hacer aparecer un menú contextual cuando se haga una pulsación larga sobre un elemento de un ListView.

ContextMenu en Android

ContextMenu en Android


Consulta los otros artículos relacionados:

Uso de un ListView en Android para mostrar una lista de datos

Optimizar un ListView usando ViewHolder

Crear un botón OptionsMenu para la action bar en Android


Creación de un ContextMenu en Android

Paso 1. Crear el XML con las opciones que contendrá el menú.

Ir a carpeta de menu y dar New-> New Resource File

Como nombre asignamos context_menu

En la vista XML escribimos el siguiente código:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/delete_item"
        android:title="Borrar"
        />
</menu>

En este caso, nuestro ContextMenu solo tendrá una opción, aunque podríamos añadir más si fuese necesario.

Paso 2.  Crear el ContextMenu

Sobreescribiremos el método onCreateContextMenu

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    menu.setHeaderTitle(this.names.get(info.position));
    inflater.inflate(R.menu.context_menu, menu);
}

En éste método se extrae información del menú (AdapterContextMenuInfo) para saber la posición del arreglo del elemento sobre el que se hizo una selección larga (info.position). Usando este dato, se consigue el nombre del elemento (names.get) y se utiliza como título del menú (menu.setHeaderTitle).

Éste método crea el menú contextual.

Paso 3. Manejar los eventos clic del menu

Sobreescribiremos el método onContextItemSelected

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()){
        case R.id.delete_item:
            this.names.remove(info.position);
            this.myAdapter.notifyDataSetChanged();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

 

En éste método extraemos también información del menú  (AdapterContextMenuInfo) y utilizamos un switch considerando que el menú contextual puede tener varias opciones.

En caso de que la opción elegida sea delete_item se removerá el elemento del arreglo (names.remove) usando la posición obtenida (info.position). Entonces, se notifican los cambios realizados al adapter (myAdapter.notifyDataSetChanged).

Paso 4. Registrar el contextMenu del ListView

Se debe “registrar” el ContextMenu , por lo que se añadirá la siguiente línea al método onCreate.

registerForContextMenu(listview);

Si deseas puedes ver el resultado aquí.

Referencias

  1. Android (2018). Menús. Disponible en [https://developer.android.com/guide/topics/ui/menus?hl=es-419]. Consultado el [17-oct-2018].
  2. Hashimi, Komatineni y McLean (2010). ProAndroid 2. APress.
¿Qué te pareció este artículo?
  • Poco informativo 
  • No era lo que buscaba 
  • Regular 
  • Interesante 
  • Excelente 
(Visto 3.315 veces)
Facebooktwitterlinkedinmail

Tu comentario

opiniones

Comments are closed