Cómo agregar mediante progtwigción un elemento de submenú a la nueva biblioteca de compatibilidad de android de diseño de material

Estoy tratando de agregar nuevos elementos de menú a un submenú en el nuevo panel de diseño de Material Design.

 ...   

Tengo la configuración @ menu / menu_nav pero ahora quiero agregar nuevos elementos de menú:

 NavigationView mDrawerList = (NavigationView) findViewById(R.id.main_navigation); Menu menu = mDrawerList.getMenu(); Menu topChannelMenu = menu.addSubMenu("Top Channels"); topChannelMenu.add("Foo"); topChannelMenu.add("Bar"); topChannelMenu.add("Baz"); mDrawerList.invalidate(); // Trying to force a redraw, doesn't help. 

Se muestran los elementos de menú del archivo @ menu / menu_nav, pero los nuevos añadidos no. Alguna idea de como hacer eso?

[Actualización 20-03-2016] Se solucionó el error. Entonces no hay necesidad de preocuparse.

[Este contenido inferior está desactualizado]

Ahora, agregar un menú dynamic a NavigationView es un error en la biblioteca de soporte de diseño . Y lo he informado al seguimiento de origen de errores de Android . Así que espera hasta que el error se solucione. Pero si quieres la solución temporal, puedes hacerlo. Primero agrega tu menú dynamic ..

  navView = (NavigationView) findViewById(R.id.navView); Menu m = navView.getMenu(); SubMenu topChannelMenu = m.addSubMenu("Top Channels"); topChannelMenu.add("Foo"); topChannelMenu.add("Bar"); topChannelMenu.add("Baz"); 

Después de agregar su menú, simplemente escriba el código a continuación.

  MenuItem mi = m.getItem(m.size()-1); mi.setTitle(mi.getTitle()); 

Actualmente es una solución hacky. Pero trabaja para mí …

[actualización 26-06-2015]

Como he informado de este error en la fuente de Android Bug Now Bug está marcado como una versión futura , aquí está el enlace https://code.google.com/p/android/issues/detail?id=176300

Entonces podemos decir que el error ya no existe en la biblioteca futura. Entonces no tienes que usar una solución difícil. También actualizaré esta respuesta nuevamente cuando el número de versión de la versión futura sea el principal para este error.

Puede agregar y eliminar elementos de la vista de navegación cambiando la visibilidad. Obtenga el elemento en el índice y configure Visible a verdadero para mostrar y falso para ocultarlo.

 MenuItem item = navigationView.getMenu().getItem(3); item.setVisible(false); 

Encontré una manera más fácil de cambiar la vista de navegación (trabajar con el submenú y el menú). Puede volver a inflar NavigationView en tiempo de ejecución con 2 líneas de código. En este ejemplo, vuelvo a inflar new_navigation_drawer_items.xml usando el método público inflateMenu (Puede crear un archivo xml de menú con su nuevo submenú)

 navigationView.getMenu().clear(); //clear old inflated items. navigationView.inflateMenu(R.menu.new_navigation_drawer_items); //inflate new items. 

Use este método para agregar menú y submenú

 private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < count; i++) { final View child = mNavigationView.getChildAt(i); if (child != null && child instanceof ListView) { final ListView menuView = (ListView) child; final HeaderViewListAdapter adapter = (HeaderViewListAdapter) menuView.getAdapter(); final BaseAdapter wrapped = (BaseAdapter) adapter.getWrappedAdapter(); wrapped.notifyDataSetChanged(); } } } 

y llame a este método donde configura el contenido del cajón.

Así es como manipulo el elemento del submenú en NavigationView

1) Crear archivo menu.xml