Android – Context Menu

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