Crear submenús de forma programática para el menú existente creado a partir de XML

He creado mis menús de los padres en xml, ahora no sé crear submenus debajo de esos padres que usan código. Esto significa que los padres están codificados en menu.xml y los submenús se cargarán basándose en un código dinámico a medida que los datos estén disponibles.

Cuando intenté usar menu.addSubMenu está creando un nuevo artículo del menú del padre.

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> 

Luego más tarde en el código:

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

Ok, deberías probar esto

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

Sé que este es un hilo muy antiguo, pero espero que esto ayude a otros como yo que tenía el mismo requisito.

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> 

Luego programáticamente en su 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"); } 

Espero que esto ayude.

  • OnOptionsItemSelected no se llama desde fragmento vista de detalle maestro
  • Cómo cambiar el tamaño del texto del menú
  • Cómo cambiar el menú emergente del color de fondo android
  • Android crea un elemento de menú de desbordamiento personalizado
  • ¿Cómo seleccionar múltiples casillas de verificación en el submenú de Android?
  • cómo utilizar el componente DrawerLayoutAndroid para cajón de construcción en aplicaciones de reactividad nativa?
  • Diálogo de alerta desde dentro de onOptionsItemSelected android
  • Ampliar la actividad del cajón de navegación a otras actividades
  • Reutilización de la barra de acción en todas las actividades de aplicación
  • Cómo agregar menú a un diseño
  • ¿Cómo extender una actividad base en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.