I am using the following method to add a ContextMenu to a custom view i have built but i want to know how to react to the press of that contextmenu.
This is not an Activity so i cannot do this:
@override
public boolean onOptionsItemSelected(MenuItem item) {
private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu arg0, View arg1,
ContextMenuInfo arg2) {
// TODO Auto-generated method stub
arg0.add(0, 0, 0, "Call");
arg0.add(0, 1, 0, "Map");
arg0.add(0, 2, 0, "Market");
}
};
Update:
Here is a very simplified verion of my class.
public final class NewView extends View {
public NewView(Context context, AttributeSet attrs) {
super(context, attrs);
cntxt = context;
this.setLongClickable(true);
this.setOnLongClickListener(vLong);
this.setOnCreateContextMenuListener(vC);
}
private View.OnLongClickListener vLong = new View.OnLongClickListener() {
public boolean onLongClick(View view) {
showContextMenu();
return true;
}
};
private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu arg0, View arg1,
ContextMenuInfo arg2) {
// TODO Auto-generated method stub
arg0.add(0, 0, 0, "Call");
arg0.add(0, 1, 0, "Map");
arg0.add(0, 2, 0, "Market");
}
};
}
Noone seem to answer exhaustively TS' question (and mine eventually), thus let me post a solution to this. Given the code above you can attach custom MenuItem's click handlers:
private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, 0, 0, "Call")
.setOnMenuItemClickListener(mMenuItemClickListener);
menu.add(0, 1, 0, "Map")
.setOnMenuItemClickListener(mMenuItemClickListener);
menu.add(0, 2, 0, "Market")
.setOnMenuItemClickListener(mMenuItemClickListener);
}
};
private OnMenuItemClickListener mMenuItemClickListener = new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case 0:
// do "Call"
return true;
case 1:
// do "Map"
return true;
case 2:
// do "Market"
return true;
}
return false;
}
};
};
Use item.getItemId() and create switch and cases based on the number returned by getItemId()
Something like this.
@override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case 1:
Log.i("FIRST ITEM: ", "CALL");
break;
case 2:
Log.i("2nd ITEM: ", "MAP");
break;
case 3:
Log.i("3rd ITEM: ", "Market");
break;
default:
}
}
I hope this is what you meant by reacting on menu items selection. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With