2015-08-07 19 views
6

Chủ đề nói tất cả. Làm thế nào tôi nên đi về lấy vị trí mục trên trình nghe onClick bằng cách sử dụng NavigationView? Ngoài ra, tại sao không có phương pháp getHeader? Cuối cùng, tôi đang làm mọi thứ theo chương trình, nhưng tiêu đề vẫn có thể nhấp được. Có suy nghĩ gì không?Cách nhận vị trí MenuItem trong trình nghe bằng cách sử dụng NavigationView mới

Cảm ơn!

+0

Bạn có thể đặt người nghe bằng cách sử dụng 'navigati onView.setNavigationItemSelectedListener() 'và thực hiện' NavigationView.OnNavigationItemSelectedListener' khi nhận mục, hãy bấm vào –

Trả lời

3

CẬP NHẬT

Bạn có thể lấy vị trí sử dụng thủ thuật này

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

Cảm ơn, tôi đã quen với người nghe, nhưng tôi không hiểu tại sao họ không thực hiện phương thức getPosition(). Trường hợp sử dụng dự định là gì? – Fhl

+0

Nếu menuitem obj là ở đó bạn có thể vượt qua đó như tham số cho bất kỳ phương pháp để thực hiện bất cứ điều gì ... –

+0

Bạn có thể cụ thể hơn không? Cảm ơn – Fhl

7

Tôi tìm thấy một giải pháp đơn giản. Bạn có thể chỉ định đơn đặt hàng bằng phương thức add(...) của Menu. Sau đó, bạn có thể truy xuất đơn đặt hàng bằng phương thức getOrder(...) của MenuItems. Nếu bạn đang sử dụng xml, bạn có thể sử dụng 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

Không biết nếu đây là cách chính xác để thực hiện, nhưng nó hoạt động, vì vậy cảm ơn (Y) – Axel

0

Trong trường hợp của tôi, tôi sử dụng

đầu tiên whit thử nghiệm này ..

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

tiếp theo này ...

@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

Nếu bạn đang sử dụng menu_drawer.xml, bạn chỉ phải thêm một số id vào các mục như sau:

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

Với điều này bạn chỉ cần có để thử nghiệm trên 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; 
    } 
}); 

Nếu bạn đang sử dụng trình đơn động, chỉ cần sử dụng phương pháp này để thêm một mục cho bạn chuyển hướng ngăn kéo:

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

Và sau đó kiểm tra theo thứ tự:

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ác vấn đề liên quan