Cómo obtener la posición MenuItem en el listener usando el nuevo NavigationView

El tema lo dice todo. ¿Cómo debo recuperar la posición del elemento en el listener onClick mediante NavigationView? Además, ¿por qué no hay método getHeader? Por último, estoy haciendo todo mediante programación, pero el encabezado sigue siendo clicable. ¿Alguna idea?

¡Gracias!

ACTUALIZAR

Usted puede conseguir la posición usando este truco

  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; } }); 

Encontré una solución simple. Puede asignar una orden utilizando el método de add(...) de Menú add(...) . A continuación, puede recuperar el pedido utilizando el getOrder(...) MenuItems. Si está utilizando xml, puede utilizar 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; } }); 

En mi caso, uso

Primera prueba con esto

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

Al lado de esto

 @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; } 

Si está utilizando menu_drawer.xml , sólo tiene que agregar un id en los elementos como este:

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

Con esto solo tienes que probar en 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; } }); 

Si está utilizando el menú dinámico, sólo use este método para agregar un elemento a su cajón de navegación:

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

Y luego prueba por la orden:

 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; } }); 
  • Cómo agregar vista de superposición sobre otra vista en android?
  • onTouchListener anula un fondo personalizado en la vista de botón?
  • SearchView.OnCloseListener no se invoca
  • Android: View.setID (int id) de forma programática - ¿cómo evitar conflictos de ID?
  • Método recomendado para presentar texto con formato en Android?
  • ¿Cómo puedo establecer dinámicamente la posición de la vista en Android?
  • Deslizar a otra vista en recyclerVer con ItemTouchHelper
  • Disposición de Android: dos vistas contiguas, de igual anchura, utilizan el ancho total de la pantalla
  • Establecer una imagen de fondo en una vista extiende mi vista
  • Android DataBinding dónde obtener el contexto?
  • ¿Cómo captura el clic de botón de búsqueda de SearchView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.