2011-06-23 10 views
7

से बनाए गए मौजूदा मेनू के लिए प्रोग्रामेटिक रूप से सबमेनस बनाएं, मैंने एक्सएमएल में अपने मूल मेनू बनाए हैं, अब मुझे नहीं पता कि कोड का उपयोग करके उन अभिभावकों के तहत सबमेनस कैसे बनाया जाए। इसका मतलब है, माता-पिता को menu.xml में कोड किया गया है और सबमेनस एक गतिशील कोड के आधार पर लोड किया जाएगा जब डेटा उपलब्ध होगा।एक्सएमएल

जब मैंने मेनू का उपयोग करने का प्रयास किया .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

@ गुंडू बांडगर ऑनऑप्शन इटैम में चयनित। यानी दबाए गए मेनू की आईडी प्राप्त करें। menuItem.getId। फिर यदि अन्य कथन का उपयोग करें, तो जांचें कि यह आईडी एक्शन या कॉमेडी मेनू के बराबर है और तदनुसार प्रक्रिया करें। – ank