首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导航组件更换/更改后台堆栈

导航组件更换/更改后台堆栈
EN

Stack Overflow用户
提问于 2021-07-23 16:27:10
回答 1查看 25关注 0票数 0

我有底部导航与导航抽屉设置与导航控制器。我目前使用的是最新的v2.4.0-alpha05,它分别为每个底部导航标签管理backstack。问题是,我有一个自定义的导航抽屉(带有一堆文本视图的线性布局),它属于activity本身,而不是片段。这个抽屉中有一个配置文件选项,当我单击它时,我想导航到account fragment。我可以用navController.navigate(R.id.action_global_accountFragment)做到这一点,但是这个片段现在将被添加到主片段的后台堆栈之上。无论何时我切换回我的主页片段(通过底部导航),我只想要主页片段的后栈,而不是account片段,也就是说,我想要将它从栈中移除,或者以任何方式切换到backstack to account fragment的,只要我点击profile view。有没有办法我可以做这些事情或者任何其他的解决方案?我还附加了我的mainactivity oncreate和navcontroller的onDestinationChanged方法。任何帮助都是非常感谢的。

代码语言:javascript
复制
 NavHostFragment navHostFragment =
            (NavHostFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.nav_host_fragment_activity_main);
    navController = navHostFragment.getNavController();

    setSupportActionBar(toolbar);


    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.homeFragment, R.id.listingsFragment, R.id.featuredFragment, R.id.categoriesFragment
            , R.id.accountFragment)
            .setOpenableLayout(drawerLayout)
            .build();


    Objects.requireNonNull(getSupportActionBar()).setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);



     NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration);
     NavigationUI.setupWithNavController(navViewBottom,navController);


    navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
        @Override
        public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
            if (destination.getId() == R.id.homeFragment){
                    controller.popBackStack(R.id.homeFragment,false, true);    //popping these so that if account fragment is in stack, it will get popped as well, but that also pops all other fragments
                Objects.requireNonNull(getSupportActionBar()).show();
               Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);
            }

            if (destination.getId() == R.id.categoriesFragment){
                
                controller.popBackStack(R.id.categoriesFragment,false);
                Objects.requireNonNull(getSupportActionBar()).show();
                Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);
            }

            if (destination.getId() == R.id.listingsFragment){
                controller.popBackStack(R.id.listingsFragment,false);
                Objects.requireNonNull(getSupportActionBar()).show();
                Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);
            }

            if (destination.getId() == R.id.featuredFragment) {
                controller.popBackStack(R.id.featuredFragment,false);
                Objects.requireNonNull(getSupportActionBar()).show();
                Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);
            }
            if (destination.getId() == R.id.accountFragment){
                controller.popBackStack(R.id.accountFragment,false);
                Objects.requireNonNull(getSupportActionBar()).hide();
            }
            
        }
    });

这是布局的onclick,我要从中导航到帐户片段

代码语言:javascript
复制
    @Override
public void onClick(View view) {
    
    if (view.getId() == R.id.relativeLayout_profile_navDrawer) {
        drawerLayout.closeDrawer(GravityCompat.START);
        navController.navigate(R.id.action_global_account);

    }

}

EN

回答 1

Stack Overflow用户

发布于 2021-07-24 08:28:22

我只是设置了bottomNavView.setSelectedItemId(R.id.yourwantedfargment),它为我完成了这项工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68496250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档