2011-06-23 98 views
7

我已经在xml中创建了我的父菜单,现在我不知道如何在使用代码的父母下创建子菜单。这意味着父母在menu.xml中编码,子菜单将在数据可用时根据动态代码加载。以编程方式为从XML创建的现有菜单创建子菜单

当我尝试使用menu.addSubMenu它正在创建一个新的父菜单项。

回答

3

OKK ..你应该试试这个..

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); 
    } 
+1

嗯,在这里你正在创建代码中的所有东西,但我想要使用现有的菜单项,这些菜单项是在xml中指定的,并且我想要创建子菜单。 – Hunt

+0

显然,这个答案的作者没有阅读这个问题,并给出了一个答案,甚至没有解决原始问题 –

6

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

我知道这是一个非常非常但希望这可以帮助像我这样的人有相同的要求。

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

希望这有助于。

+0

如何在子菜单(动作和喜剧)上添加点击监听器。 –

+0

@GunduBandagar在onOptionsItemSelected中。获取按下的菜单的ID即。 menuItem.getId。然后使用if then else语句,检查该id是否等于动作或喜剧菜单,并相应地执行该过程。 – ank