2012-04-12 4 views
3

メニュー項目が入っているグループIDを取得できますか?AndroidのメニューグループIDを取得しますか?

私はこれが働くだろうと思ったが、getGroupId()は常に0を返します。

のxml:

<?xml version="1.0" encoding="UTF-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:id="@+id/menu_group">   
     <item android:id="@+id/edit" 
       android:title="Edit" /> 

     <item android:id="@+id/delete" 
       android:title="Delete" />    
    </group>    
</menu> 

コード:onMenuItemSelected(int featureId, MenuItem item)ではなくonContextItemSelected(MenuItem item)

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    int groupId = item.getGroupId(); //always zero 

    return super.onContextItemSelected(item); 
} 

答えて

3

コールこの方法では、オプションメニューとのContextMenuをアンドロイドの2種類のメニューです。

+0

私のコードは、フラグメントに私は' onMenuItemSelected'を使用できるかどうかわからないです。私はここに記載されている問題を実行している:http://stackoverflow.com/questions/5297842/how-to-handle-oncontextitemselected-in-a-multi-fragment-activityと私のメニューをコードで作成しないようにしたい(prefer XMLでそれらを持っている)。私は、グループ内のメニューをラップし、onContextItemSelectedでグループidを検出することができると期待していた –

+0

私はリンクされたその質問のコードに従ってしまった。レッドのようなものですが、より良い方法ではないようです。 –

0

私は断片でそれをテストしました、それは動作します。以下のコードを見て:

public class ContextMenuActivity extends FragmentActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ContextMenuFragment content = new ContextMenuFragment(); 
    getSupportFragmentManager().beginTransaction().add(
      android.R.id.content, content).commit(); 
} 

public static class ContextMenuFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_context_menu, container, false); 
     registerForContextMenu(root.findViewById(R.id.long_press)); 
     return root; 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 

     new MenuInflater(getActivity().getApplication()).inflate(R.menu.menu, menu); 

     menu.add(777, 0, Menu.NONE, "Menu A"); 
     menu.add(777, 1, Menu.NONE, "Menu B"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case 0: 
       Log.i("ContextMenu", "Item 1a was chosen"); 
       Log.i("ContextMenu", "group: " + item.getGroupId()); 
       return true; 
      case 1: 
       Log.i("ContextMenu", "Item 1b was chosen"); 
       Log.i("ContextMenu", "group: " + item.getGroupId()); 
       return true; 
      case R.id.edit: 
       Log.i("ContextMenu", "Item Edit was chosen"); 
       Log.i("ContextMenu", "group: " + item.getGroupId()); 
       return true; 
      case R.id.delete: 
       Log.i("ContextMenu", "Item Delete was chosen"); 
       Log.i("ContextMenu", "group: " + item.getGroupId()); 
       return true; 
     } 
     return super.onContextItemSelected(item); 
    } 
} 
} 

`

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:id="@+id/menu_group">   
     <item android:id="@+id/edit" 
       android:title="Edit" 
       android:orderInCategory="0" 
       android:menuCategory="system" /> 

     <item android:id="@+id/delete" 
       android:title="Delete" 
       android:orderInCategory="0" 
       android:menuCategory="system" />    
    </group>    
</menu> 
+0

さて、コードで 'menu.add'を実行する必要があります。フラグメントが表示するメニューを自動的に検出できない理由を理解していない。 –

+0

Javaコードでメニューを追加したり、XMLから膨らませることで、どちらも選択してグループIDを取得できることに注意してください。 :) – Longerian

関連する問題