[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);



