Menús dinámicos en NavigationView

Tengo este diseño:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- The ActionBar --> <include layout="@layout/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!-- The main content view --> <FrameLayout android:id="@+id/flContent" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <!-- The navigation drawer --> <android.support.design.widget.NavigationView android:id="@+id/nvView" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/white" app:menu="@menu/drawer_menu" app:headerLayout="@layout/nav_header"/> 

Por lo tanto, mirando que en NavigationView tenemos el atributo:

  app:menu="@menu/drawer_menu" 

Y tengo una carpeta de este menú de id de XML.

Quiero hacer dinamicament menús, es decir, en código debo montar los objetos 'MenuItem' y establecer en NavigationView .

¿Esto es correcto? ¿Cuál es la mejor práctica? ¿Esto es posible?

Nota: Mi código funciona con static drawer_menu , quiero mejorarlo.

Estoy esperando.

[EDITAR]

Yo lo hago:

  Menu menu = nvDrawer.getMenu(); for (KSMenuItem kmi : menus.values()) { if (menu.size() == 0) { menu.add(kmi.getId()); } if (menu.getItem(kmi.getId()) == null) { menu.add(kmi.getId()); } MenuItem mi = menu.getItem(kmi.getId()); mi.setIcon(kmi.getIcon()); mi.setTitle(kmi.getTittle()); } 

Pero este error ocurrió:

06-27 15:26:15.538 15335-15335/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.sticdev30.newdrawer, PID: 15335 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sticdev30.newdrawer/com.example.sticdev30.newdrawer.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x1

KSMenuItem es un POJO con mis datos de menú. En kmi.id informé enteros incrementales …

Estoy esperando

3 Solutions collect form web for “Menús dinámicos en NavigationView”

Parece que kmi.getId() devuelve int (o long ).

Pero Menu.add (int) agrega el menú con el título de los recursos de cadena dados, que normalmente se representa como R.string.something , y no para los valores enteros habituales.

Menu.add (CharSequence) agrega el menú con el título de CharSequence, así que necesitas hacer alguna conversión int-to-string como menu.add(kmi.getId() + "");

Puede volver a inflar NavigationView en tiempo de ejecución con 2 líneas de código mediante el método público inflateMenu . En este ejemplo, new_navigation_drawer_items.xml a inflar con new_navigation_drawer_items.xml

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

Puede agregar menús dinámicamente siguiendo los pasos siguientes:

Paso 1. Obtener el objeto de menú desde la vista de navegación NavigationView.getMenu ()

Paso 2. Agregue cualquier elemento al menú usando Menu.add ()

  • Tamaño del artículo de menú personalizado y tamaño de texto en la vista de navegación
  • Obtener las dimensiones después de setLayoutParams en Android
  • ¿Puedo agregar vistas a una vista de desplazamiento sin inflar / volver a inflar los diseños?
  • Cómo inflar una vista en una posición determinada?
  • Cambiar el color del cursor de searchView
  • ¿Cómo manejar hacer clic en las vistas secundarias y tocar en los ViewGroups de los padres?
  • Efectos del acolchado negativo
  • OnSuggestionClick recrea mi actividad
  • Android obtiene la vista de Preferencia en PreferenciaActividad
  • Getmeasuredheight () y getmeasuredwidth () devuelve 0 después de View.measure ()
  • Cómo configurar SearchView TextSize?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.