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.
这并不漂亮,但如果您需要在不复制 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(...)
我认为第二种方法是我能找到的最佳解决方案,为了以防万一,我保留第一种方法作为替代方案。