How to get MenuItem position in listener using new NavigationView

This topic says it all. How can I find the position of a position in an onClick listener using NavigationView? Also, why is there no getHeader method? Finally, I do everything programmatically, but the header is still clickable. Any thoughts?

Thanks!

+8
source share
4 answers

UPDATE

You can get the position using this trick.

final List<MenuItem> items = new ArrayList<>(); Menu menu; NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);. menu = navigationView.getMenu(); for(int i = 0; i < menu.size(); i++){ items.add(menu.getItem(i)); } navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){ @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { // update highlighted item in the navigation menu menuItem.setChecked(true); int position = items.indexOf(menuItem); return true; } }); 
+7
source

I found a simple solution. You can assign an order using the add(...) method. Then you can get the order using the MenuItems getOrder(...) method. If you use xml, you can use android:orderInCategory="..." .

 NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);. Menu menu = navigationView.getMenu(); for(int i=0; i < menu.size(); i++){ items.add(Menu.NONE, Menu.NONE, i, menu.getItem(i)); } navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){ @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { // update highlighted item in the navigation menu menuItem.setChecked(true); int position=items.getOrder(); return true; } }); 
+9
source

If you use menu_drawer.xml you just need to add id to elements like this:

 <item android:id="@+id/nav_top_stories" android:title="@string/txt.menu.item1" /> 

With this, you just need to check on menuItm.getId() :

  navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){ @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { // update highlighted item in the navigation menu menuItem.setChecked(true); switch(menuItem.getId()){ case R.id.txt_menu_item1 : //do what you want to do; break; case R.id.txt_menu_item2 : // etc, } return true; } }); 

If you use a dynamic menu, simply use this method to add an item to the navigation box:

 NavigationView.getMenu().add(int groupId, int itemId, int order, CharSequence title) 

And then check the order:

 navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){ @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { // update highlighted item in the navigation menu menuItem.setChecked(true); switch(menuItem.getOrder()){ case 0 : //do what you want to do; break; case 1 : // etc, default : //do whatever you want ; } return true; } }); 
+1
source

In my case, I use

first whit this test ..

 Log.d(TAG, navigationView.getMenu().getItem(0).isChecked()); Log.d(TAG, navigationView.getMenu().getItem(1).isChecked()); Log.d(TAG, navigationView.getMenu().getItem(2).isChecked()); 

Further...

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { if(navigationView.getMenu().getItem(0).isChecked()) { cerrarSesion(); }else { navigationView.getMenu().getItem(0).setChecked(true); seleccionarItem(navigationView.getMenu().getItem(0)); } } return false; } 
0
source

All Articles