Hello good afternoon I'm working with onNavigationItemSelected and I would like to know if there is any way that depending on the user accessing the app is the view of the menu to be presented.
Hello good afternoon I'm working with onNavigationItemSelected and I would like to know if there is any way that depending on the user accessing the app is the view of the menu to be presented.
Suppose a scenario with three types of users:
You can create a menu with three groups. By default, only the group of subscriber options, the lower group, will be visible to all. The other groups of options will make them visible according to the type of user.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_admin"
android:visible="false">
<item
android:id="@+id/nav_borrar"
android:title="@string/lbl_borrar" />
<item
android:id="@+id/nav_configurar"
android:title="@string/lbl_configurar" />
</group>
<group
android:id="@+id/group_editor"
android:visible="false">
<item
android:id="@+id/nav_editar"
android:title="@string/lbl_editar" />
</group>
<group
android:id="@+id/group_suscriptor"
android:visible="true">
<item
android:id="@+id/nav_leer"
android:title="@string/lbl_leer" />
<item
android:id="@+id/nav_imprimir"
android:title="@string/lbl_imprimir" />
</group>
</menu>
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
If the user is admin
:
String strUsuarioTipo="admin";
if (strUsuarioTipo.equals("admin")){
navigationView.getMenu().setGroupVisible(R.id.group_admin, true);
navigationView.getMenu().setGroupVisible(R.id.group_editor, true);
}
If it's editor
:
String strUsuarioTipo="editor";
if (strUsuarioTipo.equals("editor")){
navigationView.getMenu().setGroupVisible(R.id.group_editor, true);
}
If suscriptor
is already the menu comes with its visible options by default.
Create separate menus and display them as appropriate:
nav_suscriptor.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_suscriptor">
<item
android:id="@+id/nav_leer"
android:title="@string/lbl_leer" />
<item
android:id="@+id/nav_imprimir"
android:title="@string/lbl_imprimir" />
</group>
</menu>
nav_editor.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_editor">
<item
android:id="@+id/nav_editar"
android:title="@string/lbl_editar" />
</group>
<group
android:id="@+id/group_suscriptor">
<item
android:id="@+id/nav_leer"
android:title="@string/lbl_leer" />
<item
android:id="@+id/nav_imprimir"
android:title="@string/lbl_imprimir" />
</group>
</menu>
nav_admin.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group_admin">
<item
android:id="@+id/nav_borrar"
android:title="@string/lbl_borrar" />
<item
android:id="@+id/nav_configurar"
android:title="@string/lbl_configurar" />
</group>
<group
android:id="@+id/group_editor">
<item
android:id="@+id/nav_editar"
android:title="@string/lbl_editar" />
</group>
<group
android:id="@+id/group_suscriptor">
<item
android:id="@+id/nav_leer"
android:title="@string/lbl_leer" />
<item
android:id="@+id/nav_imprimir"
android:title="@string/lbl_imprimir" />
</group>
</menu>
//Cargamos el menú mínimo por defecto
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_suscriptor);
switch (strTipoUsuario) {
case "admin":
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.nav_admin);
break;
case "editor":
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.nav_editor);
break;
default:
//Habremos cargado nav_suscriptor por defecto
break;
}