Android:如何在另一个菜单xml中包含菜单xml?

dwj*_*ton 6 xml android contextmenu submenu

简单的问题.

我有我的儿童用品菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/fp_pitcher"
        android:title="Pitcher">
    </item>
    <item
        android:id="@+id/fp_catcher"
        android:title="Catcher">
    </item>
<!-- SNIP ---> 
</menu>
Run Code Online (Sandbox Code Playgroud)

后来我想把它包含在这个菜单的子菜单中:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item
        android:id="@+id/teameditor_remove"
        android:title="Remove Player from Team">
    </item>

    <item
        android:id="@+id/teameditor_assignbattingposition"
        android:title="Assign Batting Position">
    </item>

    <item
        android:id="@+id/teameditor_assignfieldingposition"
        android:title="Assign Feilding Position">
        <!-- I want to include the submenu here-->
    </item>

</menu>
Run Code Online (Sandbox Code Playgroud)

这里的问题有点回答 - 我不知道如何给子菜单充气.

我想你在onContextItemSelected方法中给它充气 - 但是inflate需要一个菜单​​对象,它不会传递给onContextItemSelected.

Dan*_*son 0

这并不漂亮,但如果您需要在不复制 XML 内容的情况下完成此操作(这很容易工作)。当您扩充第二个菜单时,您还可以menu.findItem(R.id.teameditor_assignfieldingposition).getSubMenu().add(...)对要添加的每个项目执行 a 操作。如果字符串数组资源中有字符串(“Pitcher”和“Catcher”),则可以迭代该数组以添加与原始数组中相同的项目。或者,您可能需要解析其他菜单的 XML,我猜您可以通过膨胀它来欺骗它,然后使用它的size()getItem(int)

事实上,您可以将第一个菜单膨胀为 a Menu,然后使用size()getItem(int)MenuItems 从中取出。然后,对于每个项目,您可以在第二个菜单的 上add(menuItem.getGroupId(), menuItem.getItemId(), menuItem.getOrder(), menuItem.getTitle())执行操作。这应该将第一个菜单的所有项目添加为该项目的子菜单。这意味着您正在膨胀两个 XML 文件,但如果您想使用单独的 XML 文件,这是不可避免的,因为没有菜单 XML 文件。我可能会正常膨胀第二个菜单(在),然后将第一个菜单添加为子菜单(它给出了您在 中创建的菜单)。我认为您可以在 中完成所有操作,但我相信更好的做法是对 中的菜单进行修改。getSubMenu()findItem(R.id.teameditor_assignfieldingposition)<include>onCreateOptionsMenu(...)onPrepareOptionsMenu(...)onCreateOptionsMenu(...)onCreateOptionsMenu(...)onPrepareOptionsMenu(...)

我认为第二种方法是我能找到的最佳解决方案,为了以防万一,我保留第一种方法作为替代方案。