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).