2013-04-24 86 views
5

嗨我想在一个活动中创建多个上下文菜单。 有两个按钮,我想为每个按钮创建不同的上下文菜单。 任何人都可以告诉我或者向我推荐一些可行的例子吗?在一个活动中创建多个上下文菜单

这是我目前的代码看起来像。

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

回答

10

你必须在你的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   
} 
+0

谢谢!它现在有效。 – user1781367 2013-04-24 15:34:09

+0

欢迎您.. :) – stinepike 2013-04-24 15:34:32

1

@Override 公共无效onCreateContextMenu(文本菜单的菜单,视图V, ContextMenuInfo menuInfo){// TODO自动生成方法存根 super.onCreateContextMenu(菜单,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 公共 布尔onContextItemSelected(菜单项项){ 开关(item.getItemId()){ 情况R.id.individual: Toast.makeText(这一点,“会话类型个人选中!“, Toast.LENGTH_SHORT).show(); item.setChecked(true); item_lection_for_sessiontype = 1; 返回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); 
}