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:
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
- Android (2018). Menús. Disponible en [https://developer.android.com/guide/topics/ui/menus?hl=es-419]. Consultado el [17-oct-2018].
Tu comentario
opiniones