2012-12-09 12 views
43

मेरे पास PopupMenu है और मुझे पता है कि मेनू को संबद्ध करने का सामान्य तरीका popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu()); या ऐसा कुछ उपयोग करना है। मेरी समस्या यह है कि मेरे पास मेनू में इच्छित वस्तुओं की एक श्रृंखला है और मुझे जावा में प्रोग्रामेटिक रूप से उन्हें बदलने में सक्षम होना चाहिए। मैं यह कैसे कर सकता हूँ?पॉपअपमेनू मेनू आइटम प्रोग्रामेटिक रूप से सेट करना

धन्यवाद!

उत्तर

93

बस इसे समझ लिया;

popup.getMenu().add(groupId, itemId, order, title); 
प्रत्येक MenuItem आप जोड़ना चाहते हैं के लिए

: किसी के लिए भी यह एक ही समस्या आप बस कर में चलाता है जो।

23

बस पॉपअप मेनू को दिखाएं कि पॉपअप नीचे दिखाएगा और मूल्य जोड़ने के लिए getMenu() विधि का उपयोग करेगा। कॉल() को कॉल करना न भूलें;

PopupMenu menu = new PopupMenu(this, view); 

menu.getMenu().add("titleRes"); 
menu.show(); 
11

popupmenu.xml

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

     <item 
      android:id="@+id/slot1" 
      app:showAsAction="ifRoom|withText" 
      android:title="Movies" 
      android:visible="true"/> 
     <item 
      android:id="@+id/slot2" 
      app:showAsAction="ifRoom|withText" 
      android:title="Music" 
      android:visible="true"/> 
     <item 
      android:id="@+id/slot3" 
      app:showAsAction="ifRoom|withText" 
      android:title="Comedy" 
      android:visible="true"/> 

</menu> 

PopupMenu popupMenu = new PopupMenu(FullMenuActivity.this, view);      
popupMenu.setOnMenuItemClickListener(FullMenuActivity.this); 
popupMenu.getMenu().add(1, R.id.slot1, 1, "slot1"); 
popupMenu.getMenu().add(1,R.id.slot2,2,"slot2"); 
popupMenu.getMenu().add(1,R.id.slot3,3,"slot3"); 
popupMenu.show(); 

@Override 
    public boolean onMenuItemClick(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.slot1: 
       SessionManager.selected_slot = item.getTitle().toString(); 
       Toast.makeText(this, "slot1 Clicked", Toast.LENGTH_SHORT).show(); 
       return true; 
      case R.id.slot2: 
       SessionManager.selected_slot = item.getTitle().toString(); 
       Toast.makeText(this, "slot2 Clicked", Toast.LENGTH_SHORT).show(); 
       return true; 
      case R.id.slot3: 
       SessionManager.selected_slot = item.getTitle().toString(); 
       Toast.makeText(this, "slot3 Clicked", Toast.LENGTH_SHORT).show(); 
       return true; 
      default: 
       return true; 
     } 
    } 
2

@Voora तरुण एक अच्छा जवाब दिया में आईडी को परिभाषित करता है, और मैं इस पर मेरा उत्तर आधारित: पहले एफए का उपयोग कर ke mune.xml संसाधन, मुझे लगता है कि बेहतर दृष्टिकोण के बजाय ids फ़ाइल बनाने के लिए है:

ids.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="menuGroup" type="id"/> 
    <item name="menu1" type="id"/> 
    <item name="menu2" type="id"/> 
    <item name="menu3" type="id"/> 
</resources> 

तो फिर तुम ऐसा ही कुछ कर सकते हैं:

private void showPopup(final View anchor) { 
     PopupMenu popupMenu = new PopupMenu(anchor.getContext(), anchor); 
     popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE, "slot1"); 
     popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE,"slot2"); 
     popupMenu.getMenu().add(R.id.menuGroup, R.id.menu1, Menu.NONE,"slot3"); 
     popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       Toast.makeText(anchor.getContext(), item.getTitle() + "clicked", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
     }); 
     popupMenu.show(); 
    } 
2

यहाँ सेट ID के साथ एक पूर्ण समाधान है और संभाला गया:

 this.findViewById(R.id.hamburger_menu).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      PopupMenu menu = new PopupMenu(getApplicationContext(), v); 
      menu.getMenu().add(Menu.NONE, 1, 1, "Share"); 
      menu.getMenu().add(Menu.NONE, 2, 2, "Comment"); 
      menu.show(); 

      menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem item) { 

        int i = item.getItemId(); 
        if (i == 1) { 
         //handle share 
         return true; 
        } else if (i == 2) { 
         //handle comment 
         return true; 
        } else { 
         return false; 
        } 
       } 

      }); 
     } 
    }); 

नोट: शेयर और टिप्पणी उदाहरण के लिए हैं, आप कोड को और अधिक पठनीय बनाने के लिए संख्याओं के लिए स्थिरांक डाल सकते हैं।

इसके अलावा, मैंने Menu.NONE रखा क्योंकि मुझे मेनू आइटम को समूहीकृत करने की परवाह नहीं है। यदि आप समूह सेट समूह आईडी = 1, 2, आदि बनाना चाहते हैं ...

12

yup।! यह आपकी मदद करेगा। इस :)

Dynamic_PopUpMenu.setOnClickListener का प्रयास करें (नई View.OnClickListener() {

 @Override 
     public void onClick(View v) { 
      PopupMenu menu = new PopupMenu(DialogCheckBox.this, v); 
      menu.getMenu().add("AGIL"); 
      menu.getMenu().add("Dash"); 
      menu.getMenu().add("AGILarasan"); 
      menu.getMenu().add("Arasan"); 
      menu.show(); 
     } 
    }); 
संबंधित मुद्दे