Dynamic Menus in NavigationView

后端 未结 4 702
[愿得一人]
[愿得一人] 2021-02-14 02:42

I have this Layout:



        
相关标签:
4条回答
  • 2021-02-14 03:23

    We can dynamically add/remove menu items. Suppose we have this menu items `

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@mipmap/home_icon_x48"
            android:title="Home" />
        <item
            android:id="@+id/nav_part_catalouge"
            android:icon="@mipmap/catalogue_icon_x48"
            android:title="Parts Catalogue" />
        <item
            android:id="@+id/nav_favourite"
            android:icon="@mipmap/my_favourate_x48"
            android:title="My-Favourite" />\
        <item
            android:id="@+id/nav_opencarrequest"
            android:icon="@mipmap/cart_request"
            android:title="Cart-Request" />
    
        <item
            android:id="@+id/nav_setting"
            android:icon="@mipmap/settings_x48"
            android:title="Settings" />
    </group>
    
    
    <item android:title="">
        <menu>
            <item
                android:id="@+id/nav_logout"
                android:icon="@mipmap/logout_icon_x48"
                android:title="Logout" />
        </menu>
    </item>
    

    `

    In Activity we can add or remove menuitems based on our condition

    protected void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);// your activity layout here
       NavigationView navigationView= (NavigationView) findViewById(R.id.nav_view); // navigation view which holds menu items
       navigationView.setNavigationItemSelectedListener(this);
       if(yourCondition){
              navigationView.getMenu().getItem(0).setVisible(false); //if you want to hide first item
              navigationView.getMenu().getItem(1).setVisible(true); // if you want to show second menu item should be visible
      }
    
    
    }
    

    Hope it will help.

    0 讨论(0)
  • 2021-02-14 03:30

    Seems like kmi.getId() returns int(or long).

    But Menu.add(int) adds menu with title from the given string resources, which is usually represented as R.string.something, and not for usual integer values.

    Menu.add(CharSequence) does add menu with title of CharSequence, so you need to do some int-to-string conversion like menu.add(kmi.getId() + "");

    0 讨论(0)
  • 2021-02-14 03:34

    You can re-inflate NavigationViewat runtime with 2 lines of code using public method inflateMenu. In this example i re-inflate with new_navigation_drawer_items.xml

    navigationView.getMenu().clear(); //clear old inflated items.
    navigationView.inflateMenu(R.menu.new_navigation_drawer_items); //inflate new items.
    
    0 讨论(0)
  • 2021-02-14 03:42

    You can add menus dynamically by following steps :

    Step1. Obtain menu object from Navigation View NavigationView.getMenu()

    Step2. Add any item to the menu using Menu.add()

    0 讨论(0)
提交回复
热议问题