在Android中获取菜单组id?

在Android中获取菜单组id?,android,contextmenu,Android,Contextmenu,是否可以获取菜单项所在的组id 我原以为这样可以,但getGroupId()总是返回0: xml: 在onMenuItemSelected(int featureId,MenuItem项)中调用此方法,而不是onContextItemSelected(MenuItem项),OptionMenu和ContextMenu是android中两种不同类型的菜单我用Fragment对其进行了测试,它可以工作。请看以下代码: public class ContextMenuActivity extends

是否可以获取菜单项所在的组id

我原以为这样可以,但
getGroupId()
总是返回0:

xml:


onMenuItemSelected(int featureId,MenuItem项)
中调用此方法,而不是
onContextItemSelected(MenuItem项)
,OptionMenu和ContextMenu是android中两种不同类型的菜单

我用Fragment对其进行了测试,它可以工作。请看以下代码:

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


尝试此代码-有关详细信息,请参阅注释:

editTxt.setCustomSelectionActionModeCallback(new ActionMode.Callback(){

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu)
            {

                MenuItem [] menuitems=new MenuItem[]{};
                int i=menuitems.length;

               // menu.removeGroup(i);
                //or
               // menu.setGroupVisible(i,false);
                //or
                menu.setGroupVisible(i,false);


                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.copypaste, menu);


                return true;
            }
}

我的代码在片段中,不确定是否可以使用
onMenuItemSelected
。我遇到了这里描述的问题:我希望避免用代码创建菜单(更喜欢用XML创建菜单)。我希望能将菜单包装成一个组,并在
onContextItemSelected
中检测组id,最后我按照我链接的问题中的代码进行了操作。有点蹩脚,但似乎不是一个更好的方法。是的,只是看起来很蹩脚你必须做
菜单。在代码中添加
。不明白为什么片段不能自动检测显示哪个菜单。请注意,我在java代码中添加菜单和从xml进行膨胀,两者都可以被选择并获取其组id:)
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>
editTxt.setCustomSelectionActionModeCallback(new ActionMode.Callback(){

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu)
            {

                MenuItem [] menuitems=new MenuItem[]{};
                int i=menuitems.length;

               // menu.removeGroup(i);
                //or
               // menu.setGroupVisible(i,false);
                //or
                menu.setGroupVisible(i,false);


                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.copypaste, menu);


                return true;
            }
}