2015-08-07 5 views
6

Das Thema sagt alles. Wie gehe ich vor, um die Artikelposition auf dem onClick-Listener mithilfe von NavigationView abzurufen? Warum gibt es auch keine getHeader-Methode? Schließlich mache ich alles programmatisch, aber der Header ist immer noch anklickbar. Irgendwelche Gedanken?So erhalten Sie die MenuItem-Position im Listener mit dem neuen NavigationView

Danke!

+0

Sie können Listener mit 'navigati einstellen onView.setNavigationItemSelectedListener() 'und das Implementieren von' NavigationView.OnNavigationItemSelectedListener' zum Empfangen von Elementen klicken Sie auf –

Antwort

3

UPDATE

Sie können Position erhalten Sie diesen 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; 
     } 
    }); 
+1

Danke, ich bin mit dem Listener vertraut, aber ich verstehe nicht, warum sie keine getPosition() -Methode implementieren. Was ist der beabsichtigte Anwendungsfall? – Fhl

+0

Wenn Menüelement obj dort ist, können Sie das als Parameter an irgendeine Methode übergeben, um irgendwas durchzuführen ... –

+0

Konnten Sie spezifischer sein? Danke – Fhl

7

ich eine einfache Lösung gefunden. Sie können eine Bestellung mit der Methode add(...) des Menüs zuweisen. Dann können Sie die Bestellung mit der Methode getOrder(...) von MenuItems abrufen. Wenn Sie XML verwenden, können Sie android:orderInCategory="..." verwenden.

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

Weiß nicht, ob dies der richtige Weg ist, es zu tun, aber es hat funktioniert, so danke (Y) – Axel

0

In meinem Fall verwende ich

ersten Test Whit dieses ..

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

neben dieser ...

@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

Wenn Sie menu_drawer.xml verwenden, können Sie einfach muss ein id in den folgenden Elementen hinzufügen:

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

Damit Sie müssen nur auf menuItm.getId() testen:

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

Wenn Sie dynamisches Menü verwenden, nur diese Methode verwenden, um ein Element Sie Navigationsleiste hinzuzufügen:

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

Und dann testen mit der Bestellung:

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