在Android中获取导航抽屉的当前选定项

9

如何获取导航抽屉中当前选定的项目?我的菜单存储在 drawer_menu.xml 中。

navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.change_sec:
                    Intent intent_sec = new Intent(MainActivity.this, ClassDataProvider.class);
                    startActivityForResult(intent_sec, 9);
                    drawerLayout.closeDrawers();
                    break;
                case R.id.holiday_list:
                    Intent intent = new Intent(MainActivity.this, HolidayList.class);
                    startActivity(intent);
                    drawerLayout.closeDrawers();
                    break;
            }
            return true;
        }
    });

你的代码应该可以工作,发生了什么事? - John Sardinha
4个回答

12
例如,您可以使用:
private int getCheckedItem(NavigationView navigationView) {
    Menu menu = navigationView.getMenu();
    for (int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
        if (item.isChecked()) {
            return i;
        }
    } 

    return -1;
}

4
您可以使用以下代码来判断某个选项是否被选中:
if(navigationView.getMenu().findItem(R.id.nav_item).isChecked())
//do some stuff

1
您有一个名为OnNavigationItemSelectedListener的方法,其方法是onNavigationItemSelected(MenuItem item),每次选择新项目时都会调用该方法。该item具有getItemId()方法,它将返回id和getOrder()方法,它将返回位置。
在您的类中创建int变量,保存此id。
例如,您可以稍后将其保存到bundle中的onSaveInstanceState,然后在onRestorInstanceState上获取它。并使用navigationView.setCheckedItem(savedItemId);应用它。

1
在我的情况下,我总是保持对导航控制器的全局引用,就像这样在我的MainActivity中:
navController = findNavController(R.id.nav_host_fragment)

如果我需要知道用户当前在哪个菜单项上,只需像这样获取当前目标的id:
val menuId = (activity as MainActivity).navController.currentDestination?.id

你可以将menuId与导航图中定义的id进行比较(这些id应该与菜单项的id相同)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接