studio showasaction never item example bar app actionbar android android-menu

showasaction - menu category android



Configuración de elementos del menú PopupMenu mediante programación (6)

Tengo un PopupMenu y sé que la forma habitual de asociar un menú es usar popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu()); o algo por el estilo Mi problema es que tengo una serie de elementos que quiero en el menú y necesito poder cambiarlos programáticamente en Java. ¿Cómo puedo hacer esto?


@Vora Tarun dio una buena respuesta, y basé mi respuesta en ella: Primero, en lugar de usar recursos mune.xml falsos, creo que un mejor enfoque es crear un archivo ids lugar:

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>

Entonces puedes hacer algo como eso:

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


Aquí hay una solución completa con IDs configurados y manejados:

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

Nota: compartir y comentar son, por ejemplo, también puedes poner constantes para los números 1,2 para que el código sea más legible.

Además, puse Menu.NONE porque no me importa agrupar los elementos del menú. En caso de que quiera hacer un grupo, configure el ID del grupo = 1, 2, etc ...


Define los identificadores en 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; } }


Lo descubrí; para cualquiera que se encuentre con este mismo problema, simplemente lo hace:

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

para cada elemento de MenuItem que quiera agregar.


Prueba esto:

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("AGILarasan"); menu.getMenu().add("Arasan"); menu.show(); } });


Simplemente cree el menú emergente que registra la vista que aparecerá debajo de la ventana emergente y use el método getMenu () para agregar los valores. No te olvides de llamar a show ();

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