Définition des éléments du menu PopupMenu par programme

J'ai un PopupMenu et je sais que la façon habituelle d'associer un menu à l'utilisation est popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu()); Ou quelque chose de semblable. Mon problème est que j'ai un ensemble d'éléments que je veux dans le menu et je dois pouvoir les modifier par programme en Java. Comment puis-je faire ceci?

Je vous remercie!

  • Menu coulissant vertical dans Android
  • Modifier le style des éléments Android dans ActionBar
  • Comment puis-je cacher un élément de menu dans la barre d'action?
  • ListFragment onPrepareOptionsMenu appelé avant onCreate. Pourquoi et comment réparer / contourner?
  • Android getMenuInflater () dans une sous-classe de fragments - ne peut pas résoudre la méthode
  • ShowAsAction = "always" est ignoré dans la barre d'outils
  • Comment puis-je forcer la méthode onPrepareOptionsMenu à tirer?
  • Comment puis-je créer des éléments de menu dynamiquement?
  • 6 Solutions collect form web for “Définition des éléments du menu PopupMenu par programme”

    Je l'ai simplement compris; Pour quiconque rencontre ce même problème, vous venez de faire:

     popup.getMenu().add(groupId, itemId, order, title); 

    Pour chaque MenuItem vous souhaitez ajouter.

    Créez simplement le menu contextuel enregistrant la vue, la fenêtre contextuelle apparaîtra en dessous et utilisez la méthode getMenu () pour ajouter les valeurs. N'oubliez pas d'appeler show ();

     PopupMenu menu = new PopupMenu(this, view); menu.getMenu().add("titleRes"); menu.show(); 

    Définit les identifiants dans 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; } } 

    Ouaip.! Cela vous aidera. Essaye ça:)

    Dynamic_PopUpMenu.setOnClickListener (new 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(); } }); 

    @Voora Tarun a donné une bonne réponse, et j'ai fondé ma réponse à ce sujet: d'abord à l'aide de faux ressources mune.xml , je pense mune.xml meilleure approche est de créer un fichier ids la place:

    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> 

    Ensuite, vous pouvez faire quelque chose comme ça:

     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(); } 

    Voici une solution complète avec identifiants définis et traités:

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

    Remarque: partager et commenter sont par exemple, vous pouvez également mettre des constantes pour les nombres 1,2 afin de rendre le code plus lisible.

    De plus, je mets Menu.NONE parce que je ne me soucie pas de regrouper les éléments du menu. Dans le cas où vous voulez faire le groupe groupe groupe id = 1, 2, etc …

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.