如何一起使用 AppBarConfiguration 和 setNavigationItemSelectedListener
how to use AppBarConfiguration and setNavigationItemSelectedListener together
我的导航菜单中有 8 个项目。我为其中的 5 个设置了片段,我想为最后 3 个设置敬酒。
当我不设置案例 2 时,案例 1 运行良好。但是当我设置案例 2 时,案例 1 不起作用。
案例 1 :
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
//define in mobile_navigation.xml
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_update_data, R.id.nav_notifications,
R.id.nav_stop, R.id.nav_change_pass)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
案例 2:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.nav_exit:
{
Toast.makeText(Main2Activity.this,"gbfg",Toast.LENGTH_SHORT).show();
break;
}
case R.id.nav_get_update_app:
{
break;
}
case R.id.nav_about_us:
{
break;
}
}
return false;
}
});
您必须使用 NavigationUI.onNavDestinationSelected
回调来处理此问题。检查以下内容:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = NavigationUI.onNavDestinationSelected(item, navController);
if (!handled) {
switch (item.getItemId()) {
case R.id.nav_exit: {
Toast.makeText(Main2Activity.this, "gbfg", Toast.LENGTH_SHORT).show();
break;
}
case R.id.nav_get_update_app: {
break;
}
case R.id.nav_about_us: {
break;
}
}
}
drawer.closeDrawer(GravityCompat.START);
return handled;
}
});
除此之外,您必须在调用 setupWithNavController
之后调用 NavigationItemSelectedListener
,如下所示:
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(...);
我的导航菜单中有 8 个项目。我为其中的 5 个设置了片段,我想为最后 3 个设置敬酒。 当我不设置案例 2 时,案例 1 运行良好。但是当我设置案例 2 时,案例 1 不起作用。
案例 1 :
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
//define in mobile_navigation.xml
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_update_data, R.id.nav_notifications,
R.id.nav_stop, R.id.nav_change_pass)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
案例 2:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.nav_exit:
{
Toast.makeText(Main2Activity.this,"gbfg",Toast.LENGTH_SHORT).show();
break;
}
case R.id.nav_get_update_app:
{
break;
}
case R.id.nav_about_us:
{
break;
}
}
return false;
}
});
您必须使用 NavigationUI.onNavDestinationSelected
回调来处理此问题。检查以下内容:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = NavigationUI.onNavDestinationSelected(item, navController);
if (!handled) {
switch (item.getItemId()) {
case R.id.nav_exit: {
Toast.makeText(Main2Activity.this, "gbfg", Toast.LENGTH_SHORT).show();
break;
}
case R.id.nav_get_update_app: {
break;
}
case R.id.nav_about_us: {
break;
}
}
}
drawer.closeDrawer(GravityCompat.START);
return handled;
}
});
除此之外,您必须在调用 setupWithNavController
之后调用 NavigationItemSelectedListener
,如下所示:
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(...);