您好我正在尝试在一个活动中创建多个上下文菜单。 有两个按钮,我想为每个按钮创建不同的上下文菜单。 有人可以建议我或推荐我一些有用的例子吗?
这是我目前的代码。
registerForContextMenu(btn_1);
registerForContextMenu(btn_2);
btn_1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openContextMenu(v);
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openContextMenu(v);
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.media_menu, menu);
menu.setHeaderTitle("Context menu for btn_1");
menu.setHeaderIcon(R.drawable.icon_media_up);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.photo:
Toast.makeText(this, "One", Toast.LENGTH_SHORT).show();
return true;
case R.id.video:
Toast.makeText(this, "Two", Toast.LENGTH_SHORT).show();
return true;
case R.id.audio:
Toast.makeText(this, "Three", Toast.LENGTH_SHORT).show();
return true;
}
return super.onContextItemSelected(item);
}
答案 0 :(得分:13)
您必须在onCreateContextMenu
方法中处理此问题。有一个参数View
,它是您点击的视图。因此,通过使用该参数,您可以膨胀不同的菜单。例如
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if(v.getId() == R.id.first_button)
inflate one menu
else if(v.getId() == R.id.second_button)
inflate another menu
}
答案 1 :(得分:1)
@覆盖 public void onCreateContextMenu(ContextMenu菜单,View v, ContextMenuInfo menuInfo){ // TODO自动生成的方法存根 super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater menuiflatr=getMenuInflater();
if(v.getId() == R.id.ChooseSession){
menuiflatr.inflate(R.menu.session_menu, menu);
menu.setHeaderTitle("Choose Session Type");
menu.setHeaderIcon(R.drawable.ic_launcher);
MenuItem item_individual=menu.findItem(R.id.individual);
MenuItem item_group=menu.findItem(R.id.group);
if(itemselection_for_sessiontype==1)item_individual.setChecked(true);
else if(itemselection_for_sessiontype==2)item_group.setChecked(true);
}
else if(v.getId() == R.id.ChooseTrajectory){
//inflate another menu
menuiflatr.inflate(R.menu.trajectory_menu, menu);
menu.setHeaderTitle("Enable Trajectory");
menu.setHeaderIcon(R.drawable.ic_launcher);
MenuItem item_On=menu.findItem(R.id.on);
MenuItem item_Off=menu.findItem(R.id.off);
if(itemselection_for_trajectory==1)item_On.setChecked(true);
else if(itemselection_for_trajectory==2)item_Off.setChecked(true);
}
else if(v.getId() == R.id.ChooseMapeType){
//inflate another menu
menuiflatr.inflate(R.menu.maptype_menu, menu);
menu.setHeaderTitle("Choose Map Type");
menu.setHeaderIcon(R.drawable.ic_launcher);
}
}
@覆盖
public boolean onContextItemSelected(MenuItem item){
开关(item.getItemId()){
案例R.id.individual:
Toast.makeText(this," Session Type Individual selected!", Toast.LENGTH_SHORT).show();
item.setChecked(真);
itemselection_for_sessiontype = 1;
return true;
case R.id.group:
Toast.makeText(this, "Session Type Group selected!", Toast.LENGTH_SHORT).show();
item.setChecked(true);
itemselection_for_sessiontype=2;
return true;
case R.id.on:
Toast.makeText(this, "Trajectory Mode Enabled", Toast.LENGTH_SHORT).show();
item.setChecked(true);
itemselection_for_trajectory=1;
return true;
case R.id.off:
Toast.makeText(this, "Trajectory Mode Disabled!", Toast.LENGTH_SHORT).show();
item.setChecked(true);
itemselection_for_trajectory=2;
return true;
}
return super.onContextItemSelected(item);
}
public void selectSession(View view){
registerForContextMenu(view);
openContextMenu(view);
}