Android 在一个活动中创建多个上下文菜单
嗨,我正在尝试在一个活动中创建多个上下文菜单。 有两个按钮,我想为每个按钮创建不同的上下文菜单。 有谁能给我提供建议或让我参考一些工作实例吗 这是我当前的代码Android 在一个活动中创建多个上下文菜单,android,Android,嗨,我正在尝试在一个活动中创建多个上下文菜单。 有两个按钮,我想为每个按钮创建不同的上下文菜单。 有谁能给我提供建议或让我参考一些工作实例吗 这是我当前的代码 registerForContextMenu(btn_1); registerForContextMenu(btn_2); btn_1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { openCont
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);
}
您必须在
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
}
这是可行的解决方案
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
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);
}
}`
`
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.individual:
Toast.makeText(this, "Session Type Individual selected!", ` `Toast.LENGTH_SHORT).show();
item.setChecked(true);
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);
}