2013-04-24 13 views
5

こんにちは、1つのアクティビティで複数のコンテキストメニューを作成しようとしています。 2つのボタンがあり、それぞれのボタンの異なるコンテキストメニューを作成したいと思います。 誰かが私に助言をしたり、いくつかの実例を紹介してくれますか?1つのアクティビティで複数のコンテキストメニューを作成する

ここに私の現在のコードがあります。

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

+0

あなたは歓迎されている.. :) – stinepike

1

@Override 公共ボイドonCreateContextMenu(たContextMenuメニュー、ビューV、 ContextMenuInfo menuInfo){ // TODO自動生成方法スタブ super.onCreateContextMenu(メニュー、V、menuInfo)。 onContextItemSelected

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パブリックブール(MenuItemのアイテム){ スイッチ(item.getItemId()){ 場合R.id.individual: Toast.makeText(この、「セッションタイプ個別選択! "、 Toast.LENGTH_SHORT).show(); item.setChecked(true); itemselection_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); 
} 
関連する問題