2015-08-07 9 views
6

Temat mówi wszystko. Jak mam pobierać pozycję przedmiotu na detektorze onClick za pomocą NavigationView? Dlaczego nie ma metody GetHeader? Na koniec robię wszystko programowo, ale nagłówek wciąż jest klikalny. jakieś pomysły?Jak uzyskać pozycję MenuItem w odbiorniku za pomocą nowego NavigationView

Dzięki!

+0

Możesz ustawić detektor używając 'navigati onView.setNavigationItemSelectedListener() 'i implementacja' NavigationView.OnNavigationItemSelectedListener' dla otrzymania pozycji kliknij –

Odpowiedz

3

UPDATE

Można uzyskać pozycję za pomocą tej sztuczki

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

Dzięki, jestem zaznajomiony z słuchaczem, ale nie rozumiem, dlaczego nie implementują metody getPosition(). Jaki jest zamierzony przypadek użycia? – Fhl

+0

Jeśli istnieje opcja menuitem, można przekazać ją jako parametr dowolnej metody wykonywania dowolnej czynności ... –

+0

Czy mógłbyś być bardziej konkretny? Dzięki – Fhl

7

znalazłem proste rozwiązanie. Możesz przypisać zamówienie za pomocą metody Menu add(...). Następnie możesz odzyskać zamówienie za pomocą metody MenuItems: getOrder(...). Jeśli używasz xml, możesz użyć 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

Nie wiem, czy to jest właściwy sposób, ale zadziałało, dzięki (Y) – Axel

0

W moim przypadku używam

pierwszy testowy to odrobina ..

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

obok tego ...

@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

Jeśli używasz menu_drawer.xml, po prostu trzeba dodać id w takich elementach jak:

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

Mając to po prostu trzeba przetestować na 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; 
    } 
}); 

Jeśli używasz dynamicznego menu, wystarczy użyć tej metody, aby dodać element do ciebie nawigacji szuflady:

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

A następnie przetestuj według zamówienia:

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; 
    } 
}); 
Powiązane problemy