如何一起使用 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(...);