How to hide elements of the onNavigationItemSelected?

1

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.

    
asked by Julio César 23.10.2017 в 01:59
source

1 answer

3

Suppose a scenario with three types of users:

  • admin
  • editor
  • subscriber

Option 1:

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.

nav_view.xml:

<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>

Dynamic code

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.

Option 2:

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>

Dynamic code

//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;
        }
    
answered by 23.10.2017 в 03:14