2012-04-12 4 views
3

Ist es möglich, die Gruppen-ID zu erhalten, in der sich ein Menüelement befindet?Rufen Sie die Menügruppen-ID in Android auf?

Ich dachte, das würde funktionieren, aber getGroupId() gibt immer 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> 

Code:

@Override 
public boolean onContextItemSelected(MenuItem item) { 

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

    return super.onContextItemSelected(item); 
} 

Antwort

3

Aufruf dieser Methode in onMenuItemSelected(int featureId, MenuItem item) statt onContextItemSelected(MenuItem item), OptionMenu und ContextMenu sind zwei verschiedene Arten Menüs in android

+0

Mein Code in ein Fragment ist, nicht sicher, ob ich' onMenuItemSelected' verwenden können. Ich laufe auf das hier beschriebene Problem: http://StackOverflow.com/Questions/5297842/How-to-Handle-oncontextitemselected-in-a-multi-fragment-activity und wollte vermeiden, meine Menüs in Code zu erstellen (bevorzugen um sie in XML zu haben). Hatte gehofft, ich könnte die Menüs in eine Gruppe wickeln und die Gruppen-ID in "onContextItemSelected" erkennen –

+0

Ich endete nach dem Code in dieser Frage, die ich verlinkt. Irgendwie lahm, scheint aber kein besserer Weg zu sein. –

0

Ich habe es mit Fragment getestet, es funktioniert. Blick auf den folgenden Code:

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

Ja, nur lahm zu sein, müssen Sie die 'menu.add' im Code tun. Verstehe nicht, warum die Fragmente nicht automatisch erkennen können, welches Menü angezeigt werden soll. –

+0

Beachten Sie, dass ich sowohl Menü in Java-Code hinzufügen und von XML aufblasen, beide können ausgewählt werden und ihre Gruppen-ID erhalten. :) – Longerian

Verwandte Themen