2011-06-23 75 views
7

Tôi đã tạo các menu chính trong xml, bây giờ tôi không biết cách tạo menu con theo các bậc cha mẹ sử dụng mã. Điều đó có nghĩa, cha mẹ được mã hóa trong menu.xml và menu phụ sẽ được tải dựa trên mã động và khi dữ liệu có sẵn.Tạo menu phụ theo trình tự cho Menu hiện có được tạo từ XML

Khi tôi cố gắng sử dụng menu.addSubMenu, nó đang tạo mục menu chính mới.

Trả lời

3

OKK .. bạn nên thử này ..

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

Vâng, ở đây bạn đang tạo mọi thứ trong một mã, nhưng tôi muốn sử dụng các mục menu hiện có được chỉ định trong xml và dưới đó tôi muốn tạo menu phụ. – Hunt

+0

Rõ ràng, tác giả của câu trả lời này không đọc câu hỏi và đưa ra câu trả lời thậm chí không giải quyết được vấn đề gốc –

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> 

Rồi sau đó trong mã:

@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

Tôi biết đây là một rất rất chủ đề cũ nhưng hy vọng điều này sẽ giúp những người khác như tôi có cùng yêu cầu.

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> 

sau đó lập trình trên activity/fragment của bạn:

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

Hope this helps.

+0

cách thêm Trình nghe nhấn vào menu phụ (Hành động và Hài). –

+0

@GunduBandagar Trong onOptionsItemSelected. Lấy id của menu được nhấn tức là. menuItem.getId. Sau đó, sử dụng nếu sau đó tuyên bố khác, kiểm tra xem id này bằng với hành động hoặc menu hài và làm quá trình cho phù hợp. – ank

Các vấn đề liên quan