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

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

Veamos como colocar un botón OptionsMenu en Android que sea visible en la action bar y nos permita agregar elementos a un ListView a través de un adapter al que le notificamos cambios.

Crear un botón OptionsMenu

Lo que deseamos realizar es lo siguiente:

botón optionsmenu

Botón OptionsMenu en Android

Queremos tener un botón en la parte superior de una aplicación, es decir, el action bar. Al pulsar el botón aparecerán nuevos elementos en la lista.


Consulta las otras entradas previas a este tema:

Optimizar un ListView usando ViewHolder

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


Paso 1. Crear un Android resource directory

Selecciona la carpeta res, da clic derecho y ve a File->New->Android resource directory

En la caja type seleccionamos menu, y como nombre dejamos menu.

Paso 2. Crear un menu resource file

Bajo la carpeta res ahora aparece una opción llamada menu

Le damos clic derecho y luego en New->menu resource file

En el campo File name escribimos un nombre como “action_bar_menu”.

Nos abre un nuevo archivo llamado action_bar_menu.xml

El código XML de éste archivo es el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/add_item"
        android:icon="@android:drawable/ic_menu_add"
        app:showAsAction = "ifRoom"
        android:title="Add"
        />
</menu>

De modo que nuestro botón tiene un id (add_item), tiene un icono (ic_menu_add que tiene forma de signo de suma), tiene un title (Add) y es de tipo ifRoom (aparece mientras haya espacio en el action bar, de lo contrario, aparece el botón de 3 puntos que indica que las opciones están agrupadas).

Paso 3.  Variables a utilizar

En la sección de declaración de variables de la clase MainActivity.java añadimos las siguientes:

private MyAdapter myAdapter;
private int  counter=0;

myAdapter es una variable que ya teníamos declarada, ahora la estamos declarando a nivel global con relación a la clase.

Counter es una variable que nos lleva la cuenta de los nuevos elementos y se usa para irlos numerando: Nuevo 1, Nuevo 2, etc.

Paso 4. Sobreescrimos el método onCreateOptionsMenu

El código a añadir es el siguiente:

@Override                                              
public boolean onCreateOptionsMenu(Menu menu){         
    MenuInflater inflater = getMenuInflater();         
    inflater.inflate(R.menu.action_bar_menu, menu);    
    return true;                                       
}

Lo que estamos haciendo es utilizar nuestro menú creado en el paso 2, colocandolo en el action bar.

Paso 5. Sobreescribimos el método onOptionsItemSelected

El código a añadir es:

@Override                                             
public boolean onOptionsItemSelected(MenuItem item){  
    switch (item.getItemId()){                        
        case R.id.add_item:                           
            this.names.add("Nuevo " + (++counter));   
            this.myAdapter.notifyDataSetChanged();    
            return true;                              
        default:                                      
            return super.onOptionsItemSelected(item); 
                                                      
    }                                                 
}

Utilizamos un switch considerando que podríamos tener más de un botón. En caso de que se pulse el botón add_item (que creamos en el paso 2) se añade un nuevo elemento al arreglo names, y se notifica al adapter (myAdapter) que han habido cambios en los datos.

 

Referencias

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

Tu comentario

opiniones

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *







8 + 1 =