如何使用新的NavigationView获取监听器中的MenuItem位置

Fhl*_*Fhl 8 android navigationview

这个话题说明了一切.我应该如何使用NavigationView检索onClick侦听器上的项目位置?另外,为什么没有getHeader方法?最后我以编程方式执行所有操作,但标题仍然可以点击.有什么想法吗?

谢谢!

Ram*_*ami 9

我找到了一个简单的解决方 您可以使用Menu的add(...)方法分配订单.然后,您可以使用MenuItems的getOrder(...)方法检索订单.如果您使用的是xml,则可以使用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;
    }
});
Run Code Online (Sandbox Code Playgroud)


Sag*_*ota 7

UPDATE

你可以使用这个技巧获得位置

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;
    }
});
Run Code Online (Sandbox Code Playgroud)


Igo*_*din 5

如果你为菜单项指定“android:orderInCategory”属性,你就可以接受它的订单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:orderInCategory="0"
        android:title="@string/news" />
    <item
        android:orderInCategory="1"
        android:title="@string/search" />
</menu>
Run Code Online (Sandbox Code Playgroud)
val navigationView = findViewById<NavigationView>(R.id.navigation)

navigationView.setNavigationItemSelectedListener { menuItem ->
    val menuItemOrder = menuItem.order

    true
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想手动指定订单,请使用此方法:

val navigationView = findViewById<NavigationView>(R.id.navigation)

navigationView.setNavigationItemSelectedListener { menuItem ->
    val menuItemIndex = bottomNavigation.menu.children.indexOf(menuItem)

    true
}
Run Code Online (Sandbox Code Playgroud)