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

时间:2016-07-12 18:37:24

标签: android android-menu android-navigation-drawer

如何获取导航抽屉的当前选定项目?我的菜单存储在 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;
        }
    });

4 个答案:

答案 0 :(得分:9)

例如,您可以使用:

private int getCheckedItem(NavigationView navigationView) {
    Menu menu = navigationView.getMenu();
    for (int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getMenu(i);
        if (item.isChecked()) {
            return i;
        }
    } 

    return -1;
}

答案 1 :(得分:3)

您可以通过以下方式查看当前是否选择了某个项目:

if(navigationView.getMenu().findItem(R.id.nav_item).isChecked())
//do some stuff

答案 2 :(得分:0)

您已经获得OnNavigationItemSelectedListener,方法为onNavigationItemSelected(MenuItem item),每次选择新项目时都会调用该方法。该item具有方法getItemId(),该方法将返回id,并获取getOrder(),该方法将返回位置。

在您的课程中创建int var,保存此ID。

例如,您可以稍后在onSaveInstanceState上将其保存为捆绑,然后在onRestorInstanceState上将其恢复。并使用navigationView.setCheckedItem(savedItemId);应用它。

答案 3 :(得分:0)

就我而言,我总是在我的 MainActivity 上保持对导航控制器的全局引用:

navController = findNavController(R.id.nav_host_fragment)

如果我需要知道我的用户当前在哪个菜单项上,我只需像这样获取当前目的地的 ID:

val menuId = (activity as MainActivity).navController.currentDestination?.id

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