2011-06-23 92 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