首页 文章

Android使用NavigationDrawer发布NavigationView

提问于
浏览
1

我正在使用带有DrawerLayout的NavigationView .

My code:

NavHeaderMainBinding navHeaderMainBinding = DataBindingUtil.inflate(getLayoutInflater(),
            R.layout.nav_header_main, mActivityMainBinding.navigationView, false);
    mActivityMainBinding.navigationView.addHeaderView(navHeaderMainBinding.getRoot());
    navHeaderMainBinding.setViewModel(mMainViewModel);
    addNavigationItem();
    NavigationUI.setupWithNavController(mActivityMainBinding.navigationView, navController);
mNavigationView.setNavigationItemSelectedListener(
        item -> {
            mDrawer.closeDrawer(GravityCompat.START);

            switch (item.getItemId()) {
                case 0:
                    // setFragment(AboutFragment.newInstance(), AboutFragment.TAG);
                    navController.navigate(R.id.nav_home);

                    return true;
                case 1:
                    navController.navigate(R.id.nav_paging);

                    //       RateUsDialog.newInstance().show(getSupportFragmentManager());
                    return true;
                case 2:
                    // startActivity(FeedActivity.newIntent(MainActivity.this));
                    return true;
                case 3:
                    mMainViewModel.logout();
                    return true;
                default:
                    return false;
            }
        });

现在的问题是,当我从导航抽屉多次点击第二个项目时,它会创建许多对象并在后面创建一个问题 . 当我按下它关闭第二个片段的所有对象然后返回到第一个片段 . 我想创建所有片段的唯一单个实例,在单击导航抽屉项目时打开 . 我怎么能实现这个目标?

1 回答

  • 0
    navigationView.setCheckedItem(R.id.nav_detail);
        navigationView.setNavigationItemSelectedListener(menuItem -> {
            drawer.closeDrawer(GravityCompat.START);
            switch (menuItem.getItemId()) {
                case R.id.nav_detail:
                    switchFragment(new HomeFragment());
                    toolbar.setTitle(Details);
                    break;
                case R.id.nav_fine:
                    switchFragment(new FineFragment());
                    toolbar.setTitle(Fine);
                    break;
                case R.id.nav_emergency:
                    toolbar.setTitle(Number);
                    switchFragment(new MockTest());
                    break;
                case R.id.temp:
                    toolbar.setTitle(Emergency);
                    switchFragment(new MainFragment());
                    break;
                case R.id.office_code:
                    toolbar.setTitle(Office);
                    switchFragment(new OfficeCodeFragment());
                    break;
    
                default:
                    toolbar.setTitle(Details);
                    switchFragment(new HomeFragment());
                }
                return true;
            });
    

    private void switchFragment(Fragment fragment) {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, fragment);
        fragmentTransaction.addToBackStack(null);
    
        fragmentTransaction.commit();
    }
    

相关问题