日安。所以我一直在与NavComponent of Jetpack合作
我认为片段的BackStack的管理已经在那里实现了,事实上它已经实现了,但是我遇到了一个问题。
这是我的结构:
我有和进入活动
我在活动中有一个NavHost
活动中有底部导航栏
对于每个底部项目,我使用单独的片段来浏览。
这是导航的代码。
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
}
}
}别管最后一件了。
接下来就是问题了。
如果我多次尝试在home和仪表板之间切换,当我按回键时,堆栈肯定会开始弹出其中包含的所有项目。所以,如果我移动了6次,我需要12次尝试才能真正退出这个应用程序。
目前,我找不到任何源,例如,navigate()方法将接受某种参数来兑现我的片段,而不是每次重新创建它并添加到BackStack中。
那么你会建议采取什么样的方法呢?
如果我要手动管理每个后退按钮上的BackStack,那么BackStack的目的究竟是什么呢?仅仅是为了创建和转发导航?
我想我错过了安卓官方文档中的一些信息来源。
事先谢谢你。
在调用navController.popBackStack()之前使用navigate()肯定不是正确的选择。
发布于 2021-02-23 23:41:33
根据这里的文件的说法:
NavigationUI还可以处理底层导航。当用户选择菜单项时,NavController调用onNavDestinationSelected()并自动更新底部导航栏中的选定项。
要做到这一点,您必须为底部导航项提供与导航图中相应的目的地相同的ids,然后将底部视图绑定到控制器,如下所示:
NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();
BottomNavigationView bottomNav = findViewById(R.id.bottom_nav);
NavigationUI.setupWithNavController(bottomNav, navController);Note:根据我个人的经验,当图形中的startDestination默认启动时,它现在并不在后台堆栈中(在我的例子中,它是我在回家时弹出的登陆页面),然后应用程序就会表现出这样的奇怪行为。因此,请确保后端堆栈上存在的开始目标应该正常工作。
https://stackoverflow.com/questions/66342492
复制相似问题