In questa lezione andremo ad analizzare il codice relativo all’OptionsMenu che abbiamo creato nella lezione precedente.
Il codice all’interno del metodo onCreate, a questo punto della guida, dovrebbe essere di chiara comprensione per il lettore e dunque ne viene volutamente omessa l’analisi. Concentriamo invece la nostra attenzione su un nuovo metodo che ancora non avevamo visto: il metodo OnCreateOptionMenu(Menu menu).
Questo metodo viene richiamato automaticamente dall’activity non appena l’utente clicca sul tasto menu dell’emulatore o del dispositivo fisico. Di default il menu è vuoto ed è dunque necessario ridefinire il metodo sopra presentato per poter visualizzare un menù personalizzato. Come possiamo vedere il metodo restituisce un valore booleano: true avrà l’effetto di notificare all’activity di mostrare il menu, mentre false avrà l’effetto contrario (il menù non verrà visualizzato).
Continuando con l’analisi del codice troviamo il metodo che permette di aggiungere una voce al menù che stiamo creando. Il prototipo di questo metodo è il seguente:
add(int groupId, int itemId, int order, CharSequence title)
- Il parametro groupId è un parametro che indica il gruppo di appartenenza della voce del menu (nel nostro caso abbiamo utilizzato Menu.NONE perchè non vogliamo utilizzare nessun gruppo);
- itemId indica l’id che verrà associata alla voce del menù (tornerà utile in fase di identificazione di quale voce del menu l’utente ha cliccato);
- order serve per specificare la posizione della voce del menù all’interno del menù stesso;
- title specifica la stringa di testo che verrà mostrata all’utente.
Come abbiamo detto è possibile sostituire il testo della voce del menù con un’immagine. In questo caso è necessario importare la classe anroid.view.MenuItem e sostituire il codice relativo all’aggiunta di una voce del menù con il seguente:
MenuItem voce1 = menu.add(Menu.NONE, 1, 1, "voce1");
voce1.setIcon(R.drawable.icon);
Come possiamo vedere è necessario creare un oggetto MenuItem utilizzando il metodo add presentato qualche paragrafo prima e poi invocare il metodo setIcon su questo nuovo oggetto.
Associamo un listener ad ogni voce di menu
E’ possibile, seguendo la tecnica già utilizzata con i bottoni, creare un oggetto di tipo MenuItem, associargli un listener e poi fare l’override del metodo che cattura il click. In questa guida, tuttavia, presenteremo un altro metodo, più semplice e di più facile implementazione, nel quale utilizzeremo la prima implementazione del menù (quella senza la dichiarazione dell’oggetto MenuItem) ed andremo ad aggiungere il metodo onOptionsItemSelected(MenuItem item) che rappresenta il listener che è necessario utilizzare per i menù. Vediamo adesso il codice da aggiungere:
public void onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case 1:
textView.setText("Ho cliccato la voce "+ id + " del menù");
break;
case 2:
textView.setText("Ho cliccato la voce "+ id + " del menù");
break;
}
}
Per esigenze di spazio abbiamo gestito solo il click sulle prime due voci del menù, si lascia per esercizio al lettore il completamento del case. Il codice mostrato è molto semplice infatti si memorizza nella variabile id l’identificativo numerico associato alla voce del menù che è stata cliccata. Ciò viene effettuato con la chiamata, sull’oggetto item, del metodo getId(). All’interno di ogni case inseriremo il codice che modella il comportamento dell’applicazione al click della voce del menù che solitamente richiama un’altra activity sostituendola a quella attuale (vedremo più avanti come fare).