【问题标题】:Navigation Controller (Managing Backstack) Jetpack Android导航控制器(管理 Backstack)Jetpack Android
【发布时间】:2021-02-23 23:19:26
【问题描述】:

美好的一天。所以我一直在使用 Jetpack for Android

NavComponent

我认为片段的 BackStack 的管理必须已经在那里实现,事实上它就在那里,但我遇到了一个问题。

这是我的结构:

我有并进入活动

我在 activity

中有一个 NavHost

我在Activity中有底部导航

对于每个底部项目,我使用单独的片段进行导航。

这是导航的代码。

     bottomNavigationView.setOnNavigationItemSelectedListener {
        when (it.itemId) {
            R.id.navigation_home -> {
                navController.apply {
                    navigate(R.id.navigation_home)
                }
                true
            }
            R.id.navigation_dashboard -> {
                navController.apply {
                    navigate(R.id.dashboardFragment)
                }
                true
            }
            R.id.navigation_notifications -> {
                true
            }
            else -> {
                false
            }
        }
    }

别在意最后一项。

所以问题是下一个。

如果我尝试在 homedashboard 之间切换多次,当我按下返回时,堆栈肯定会开始弹出其中包含的所有项目。因此,如果我移动 6 次,我将需要 12 次尝试才能真正退出应用程序。

目前我找不到任何来源,例如 navigate() 方法将接受某种参数来兑现我的片段,而不是每次都重新创建它并添加到 BackStack。 p>

那么你会建议什么样的方法?

如果我在每次按下后退按钮时手动管理 BackStack,那么 NavController 的目的是什么?只是为了创建和FORWARD导航?

我认为我在 Android 的官方文档中遗漏了一些来源。

先谢谢你。

附: 在调用navigate() 之前使用navController.popBackStack() 肯定不是正确的选择。

【问题讨论】:

    标签: android uinavigationcontroller android-architecture-components


    【解决方案1】:

    根据documentation here

    NavigationUI 也可以处理底部导航。当用户选择菜单项时,NavController 会调用 onNavDestinationSelected() 并自动更新底部导航栏中的选定项。

    为此,您必须为底部导航项提供与导航图中相应目的地相同的 ID,然后将底部视图与控制器绑定,如下所示:

    NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
    NavController navController = navHostFragment.getNavController();
    BottomNavigationView bottomNav = findViewById(R.id.bottom_nav);
    NavigationUI.setupWithNavController(bottomNav, navController);
    

    注意:根据我的个人经验,当图中的 startDestination 时,默认情况下该 start 当前不在后台堆栈中(在我的情况下,它是我在去的时候弹出的登陆页面到主页片段)然后应用程序以这样的奇怪行为行事。所以确保起始目的地存在于你的后台堆栈中应该可以正常工作。

    【讨论】:

    • 哦,谢谢!这很有帮助!去测试一下,然后回来,我脑海中突然出现的另一件事是抽屉,如果可以,我们可以用抽屉设置导航吗?
    • 像魅力一样工作!这正是我需要的!谢谢,这是一个公认的答案!
    • 虽然我在这里又遇到了一些奇怪的事情......所以我在起始片段中有一个按钮,它重定向到另一个片段。如果我回家->那个按钮->仪表板并继续按下一切就像一个魅力但是如果我回家->那个按钮->仪表板->再次那个按钮-事情变得一团糟(
    • 这听起来像是循环逻辑developer.android.com/guide/navigation/…
    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多