确定 MenuItem 的子菜单

Determining the SubMenu of a MenuItem

我的应用程序中有一个 NavigationView。在 NavView 的菜单内,我有两个子菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/nav_group_one"
        android:title="SubMenu A">
        <menu>
            <item
                android:checkable="true"
                android:title="One"/>
            <item
                android:checkable="true"
                android:title="Two"/>
        </menu>
    </item>

    <item
        android:id="@+id/nav_group_two"
        android:title="SubMenu B">
        <menu>
            <item
                android:checkable="true"
                android:title="Three"/>
            <item
                android:checkable="true"
                android:title="Four"/>
        </menu>
    </item>
</menu>

在我的 activity 的 onNavigationItemSelected() 中,我希望能够找出所选项目所在的子菜单。我该怎么做?

到目前为止我还没有找到现有的解决方案,但是我找到了一个解决方法:

要以最小的额外 XML 开销解决此问题,请将每组 sub-menu 项目包装在一个组中,ID 为:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/nav_group_one"
        android:title="SubMenu A">
        <menu>
            <group id="@+id/nav_group_wrapper_one">
                <item
                    android:checkable="true"
                    android:title="One"/>
                <item
                    android:checkable="true"
                    android:title="Two"/>
            </group>
        </menu>
    </item>

    <item
        android:id="@+id/nav_group_two"
        android:title="SubMenu B">
        <menu>
            <group id="@+id/nav_group_wrapper_two">
                <item
                    android:checkable="true"
                    android:title="Three"/>
                <item
                    android:checkable="true"
                    android:title="Four"/>
            </group>
        </menu>
    </item>
</menu>

这样一来,就可以简单地调用 item.getGroupId() 来推断其中包含的 sub-menu。