back to top

Menu: OptionsMenu e associazione di un listener โ€“ Guida Sviluppo App Android

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

Pubblicitร 

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

Pubblicitร 

In questa guida...