如何获取导航抽屉的当前选定项目?我的菜单存储在 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;
}
});
答案 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 应该与您的菜单项相同)。