2011-06-23 15 views
7

親メニューをXMLで作成しましたが、コードを使用してこれらの親の下にサブメニューを作成する方法がわかりません。つまり、親はmenu.xmlにコード化されており、サブメヌスは動的コードに基づいて、データが利用可能なときにロードされます。XMLから作成された既存メニューのサブメニューをプログラムで作成する

私はmenu.addSubMenuを使用しようとしましたが、新しい親メニュー項目を作成しています。私は、これは非常に非常にある知っている

@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

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を試してみてくださいうまくいけば、これは同じ要件を持っていた私のような人を助けるだろう。

menu/movies.xml:あなたのactivity/fragmentで、その後

<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> 

、プログラム:

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

は、この情報がお役に立てば幸いです。

3

:次に

<?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> 

以降のコードで:

+0

サブメニュー(アクションとコメディ)でクリックリスナーを追加する方法。 –

+0

@GunduBandagar onOptionsItemSelectedにあります。つまり、押されたメニューのIDを取得します。 menuItem.getId。 if then else文を使用して、このidがアクションまたはコメディメニューと等しいかどうかを確認し、それに応じて処理を行います。 – ank

関連する問題