2015-08-07 7 views
6

L'argomento dice tutto. Come dovrei andare a recuperare la posizione dell'oggetto sul listener onClick usando NavigationView? Inoltre, perché non esiste un metodo getHeader? Infine sto facendo tutto a livello di codice, ma l'intestazione è ancora cliccabile. qualche idea?Come ottenere la posizione MenuItem nell'ascoltatore utilizzando il nuovo NavigationView

Grazie!

+0

È possibile impostare listener usando 'navigati onView.setNavigationItemSelectedListener() 'e l'implementazione di' NavigationView.OnNavigationItemSelectedListener' per la ricezione dell'articolo click –

risposta

3

UPDATE

Puoi ottenere la posizione usando questo trucco

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

Grazie, ho familiarità con l'ascoltatore, ma non capisco perché non implementino un metodo getPosition(). Qual è il caso d'uso previsto? – Fhl

+0

Se menuitem obj è lì, puoi passarlo come parametro a qualsiasi metodo per eseguire qualsiasi cosa ... –

+0

Potresti essere più specifico? Grazie – Fhl

7

ho trovato una soluzione semplice. È possibile assegnare un ordine utilizzando il metodo add(...) del Menu. Quindi è possibile recuperare l'ordine utilizzando il metodo getOrder(...) di MenuItems. Se stai usando xml, puoi usare 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; 
    } 
}); 
+0

Non so se questo è il modo corretto per farlo, ma ha funzionato, quindi grazie (Y) – Axel

0

Nel mio caso, io uso

prima Pentecoste test di questa ..

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

prossimo questo ...

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

Se si utilizza menu_drawer.xml, basta è necessario aggiungere un id negli elementi come questo:

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

Con questo non resta che testare il 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; 
    } 
}); 

Se si utilizza menu dinamico, basta usare questo metodo per aggiungere un elemento a voi cassetto di navigazione:

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

E poi prova dall'ordine:

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