[DEV] – Menu contestuale su una ListView

[DEV] – Menu contestuale su una ListView

Se si desidera creare il menù contestuale di una listView in maniera dinamica e dipendente dall’elemento selezionato è necessario recuperare l’elemento della lista sul quale si è “cliccato” per generare il menù contestuale.

Per fare questo è necessario ridefinire il metodo onCreateContextMenu con una implementazione tipo la seguente:


public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
 super.onCreateContextMenu(menu, v, menuInfo);

 // Azzera il menu e assegna una icona ed un titolo
 menu.clear();
 menu.setHeaderIcon(R.drawable.icon);
 menu.setHeaderTitle(R.string.options);

 // Recupera l'oggetto della lista su cui e' stato scatenato l'evento
 AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
 int position = info.position;
 Adapter adapter = ((ListView)v).getAdapter();
 Object obj = adapter.getItem(position);

 // ... Continuare con la logica di creazione del menu

}

Chiaramente, una volta che il menù e’ stato generato e la voce di menù selezionata, bisogna implementare il metodo


public boolean onContextItemSelected(MenuItem menuItem) {

 // Recupera l'oggetto associato alla lista
 AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuItem.getMenuInfo();
 Object obj = yourListView.getAdapter.getItem(info.position);

 // ... Continuare con la logica di gestione della voce selezionata
}

Questi semplici accorgimenti possono tornare utili più spesso di quanto si crede.

Ricordatevi di registrare l’activity come listener degli elementi di contextMenu associato alla lista

registerForContextMenu(listView);

Tags: , , ,

Commenta!