如何阻止片段一直弹出到根片段? [导航组件]

Posted

技术标签:

【中文标题】如何阻止片段一直弹出到根片段? [导航组件]【英文标题】:How to stop fragment from popping all the way back to the root fragment ? [Navigation Component] 【发布时间】:2021-03-08 08:44:15 【问题描述】:

我有一个由导航组件制成的侧抽屉,当我导航到带有片段的片段并按回它时,它会将整个堆栈弹出到根片段。让我解释一下。

我从根片段导航到片段 A(这两个片段都在导航 XML 文件中定义),然后从片段 A 导航到片段 B

根片段 ---> 片段 A ---> 片段 B.

我尝试定义 menuCategory:secondary 到我的导航项,使用操作标签并在所述标签中定义“popupto”和“destination”参数,但仍然没有结果。

我们将不胜感激。

  navController = Navigation.findNavController(this, R.id.nav_host_fragment);

    if(prefsUtils.getFromPrefs(Keys.roleName).equals("PA") ||prefsUtils.getFromPrefs(Keys.roleName).equals("RSM"))
    
        navController.setGraph(R.navigation.mobile_navigation);
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_dashboard,R.id.nav_createOrder)
                .setDrawerLayout(binding.drawerLayout)
                .build();
    

    else if (prefsUtils.getFromPrefs(Keys.roleName).equals("TP"))
    
        navController.setGraph(R.navigation.mobile_navigation_tp);
        binding.navView.getMenu().clear();

        binding.navView.inflateMenu(R.menu.activity_main_drawer_tp);
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_dashboardTP)
                .setDrawerLayout(binding.drawerLayout)
                .build();
    

    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(binding.navView, navController);

 @Override
public void onBackPressed() 
    super.onBackPressed();
    navController.navigateUp();

【问题讨论】:

发布您的导航图和一些代码! 我已经添加了导航 UI 和 onbackpress 的代码 【参考方案1】:

使用

findNavController().navigateUp()

避免弹出整个后台堆栈。

【讨论】:

我在 onBackPressed 中使用了这个 conde,但它仍然弹回到根片段。【参考方案2】:

您可以通过使用控制当前屏幕(片段 B)的位置

 public void onBackPressed()


 super.onBackPressed();
startActivity(new Intent(getApplicationContext(), FragmentA.class));   



这里的 startActivity() 函数写入片段 A,以便在片段 B 中单击后退按钮时返回到片段 A。 将以上代码全部写在 Fragment B java 类中。

【讨论】:

我有大约 10 个菜单项,然后在这些片段中包含大约 10 个片段。我不认为为这么多片段添加条件会很有效。

以上是关于如何阻止片段一直弹出到根片段? [导航组件]的主要内容,如果未能解决你的问题,请参考以下文章

弹出到根视图控制器时导航栏消失

使用Android导航组件时如何从后台获取片段?

在导航控制器中弹出到根视图

如何使用导航架构组件查找子片段

iOS禁用按标签栏按钮弹出到根视图

如何在弹出到根视图 Swift 后立即更改选项卡?