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:
- ListView de filtros de búsqueda de Android
- Eliminar un oyente de una vista en android
- ViewStub debe tener un ViewGroup no nulo viewParent
- Cómo traer una vista al frente sin llamar bringToFront ()?
- ¿Por qué se crea un FrameLayout extra para fragmentos?
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
- Vincular la vista personalizada de Android a una xml de diseño específico (¿es posible?)
- Cambiar el tamaño del texto del elemento en la vista de navegación
- ¿Por qué la vista personalizada no invalida?
- Getmeasuredheight () y getmeasuredwidth () devuelve 0 después de View.measure ()
- Cómo mover un contenido de diseño fuera de la pantalla de Android
- ¿Cómo dibujar una vista encima de todo?
- Relación de aspecto fija
- onTouchListener anula un fondo personalizado en la vista de botón?
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 ()
- No hay acceso directo para DDMS en Android Studio 2.2
- OnClickListener () debe reemplazar un método de superclase?