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!
- En qué condiciones se llama a getChildView () en ExpandableListAdapter
- Android: Tutorial sobre la creación de vistas personalizadas
- Cómo inflar una vista en una posición determinada?
- Vincular la vista personalizada de Android a una xml de diseño específico (¿es posible?)
- Vista de niño androide sin estado de prensa
- Error al inflar la vista de clase interna
- Gallery ImageAdapter convertView siempre es nulo
- Guardar hardware acelerado android lienzo como mapa de bits
- Cambiar el color de fondo del botón SearchView y la consulta
- Disposición personalizada de Android - onDraw () nunca se llama
- Android - Cómo saber si una vista superpone otra vista en RelativeLayout
- addView no funciona
- No se puede importar android.support.design.widget.NavigationView
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; } });