【发布时间】:2011-09-21 03:13:09
【问题描述】:
我已经在 xml 中创建了我的父菜单,现在我不知道如何使用代码在这些父菜单下创建子菜单。这意味着,父母在 menu.xml 中编码,当数据可用时,将根据动态代码加载子菜单。
当我尝试使用 menu.addSubMenu 时,它正在创建一个新的父菜单项。
【问题讨论】:
我已经在 xml 中创建了我的父菜单,现在我不知道如何使用代码在这些父菜单下创建子菜单。这意味着,父母在 menu.xml 中编码,当数据可用时,将根据动态代码加载子菜单。
当我尝试使用 menu.addSubMenu 时,它正在创建一个新的父菜单项。
【问题讨论】:
我知道这是一个非常古老的线程,但希望这会帮助像我这样有相同要求的其他人。
menu/movies.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<group>
<item
android:id="@+id/action_filter"
android:showAsAction="never"
android:title="Filter">
<menu>
<group android:menuCategory="container">
<item
android:id="@+id/action_genre"
android:title="Genre">
<menu>
<group android:checkableBehavior="single" />
</menu>
</item>
</group>
</menu>
</item>
</group>
</menu>
然后以编程方式在您的activity/fragment:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.movies, menu);
MenuItem menuItem = menu.findItem(R.id.action_filter).getSubMenu().findItem(R.id.action_genre).getSubMenu().add(Menu.NONE, 1, Menu.NONE, "Action");
MenuItem menuItem = menu.findItem(R.id.action_filter).getSubMenu().findItem(R.id.action_genre).getSubMenu().add(Menu.NONE, 2, Menu.NONE, "Comedy");
}
希望这会有所帮助。
【讨论】:
mymenu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menubutton_submenuButton"
android:showAsAction="always"/>
<menu>
<!-- empty submenu, filled programatically -->
</menu>
</item>
</menu>
然后在代码中:
@Override
public boolean onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.mymenu, menu);
MenuItem menuItem = menu.findItem(R.id.menubutton_submenuButton);
SubMenu subMenu = menuItem.getSubMenu();
// @todo: add submenu items programmatically here.
return super.onCreateOptionsMenu(menu, inflater);
}
【讨论】:
好的..你应该试试这个..
private static final int FILE = 0;
private static final int EDIT = 1;
private static final int NEW_MENU_ITEM = Menu.FIRST;
private static final int SAVE_MENU_ITEM = NEW_MENU_ITEM + 1;
private static final int UNDO_MENU_ITEM = SAVE_MENU_ITEM + 1;
private static final int REDO_MENU_ITEM = UNDO_MENU_ITEM + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i("this is test ", "oncreate option menu is called");
// menu.add("this is first menu");
// menu.add("this is second menu");
//
SubMenu fileMenu = menu.addSubMenu("File");
SubMenu editMenu = menu.addSubMenu("Edit");
fileMenu.add(FILE, NEW_MENU_ITEM, 0, "new");
fileMenu.add(FILE, SAVE_MENU_ITEM, 1, "save");
editMenu.add(EDIT, UNDO_MENU_ITEM, 0, "undo");
editMenu.add(EDIT, REDO_MENU_ITEM, 1, "redo");
return super.onCreateOptionsMenu(menu);
}
【讨论】: