Molto spesso nelle applicazioni con liste di “oggetti” è necessario creare dei contextMenu e gestire il click su questi. Ecco un semplice tutorial.
Ecco un esempio di contextMenu.
Per realizzare un menù di questo tipo è necessario procedere come segue:
- creare nella directory menu, sotto la cartella res (res/menu), il file menu.xml con il seguente contenuto:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns_android="http://schemas.android.com/apk/res/android" > <item android_id="@+id/menu_edit" android_title="@string/menu_edit"/> <item android_id="@+id/menu_cancel" android_title="@string/menu_cancel" /> <item android_id="@+id/menu_reset" android_title="@string/menu_reset"/> </menu>
dove i valori “android:title” vengono presi dai file strings.xml ed i vari “item” rappresentano le diverse voci del menù.
- nell’activity dove vogliamo inserire il menu, inserire il seguente frammento di codice:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); }
Per gestire il click sulle singole opzioni creare il seguente metodo @Override
@Override public boolean onContextItemSelected (MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); Object o = this.getListAdapter().getItem(info.position); String[] str = o.toString().split(","); int itemSel = Integer.parseInt(str[1].substring(str[1].indexOf("=")+1, str[1].length())); Log.i("idSel", Integer.toString(itemSel)); switch (item.getItemId()) { case R.id.menu_edit: Log.i("menu", "edit"); break; case R.id.menu_cancel: Log.i("menu", "cancel"); break; case R.id.menu_reset: Log.i("menu", "reset"); break; default: return super.onContextItemSelected(item); } return true; }
Nel caso in cui vogliamo collegare questo menu ad una listView, è necessario inserire la seguente istruzione nel metodo onCreate:
registerForContextMenu(getListView());