【发布时间】:2021-05-05 18:30:59
【问题描述】:
在我的Activity 中,我在OnCreate 中设置了NavController:
navController = findNavController(this, R.id.NavHostFragment)
在我的Fragments 中,我在onViewCreated 中设置了NavController:
navController = Navigation.findNavController(view)
Activity 仅在单击项目时从NavigationView 导航到几个Fragments(例如SitesFragment、ContactsFragment、TasksFragment 等),如下所示:
R.id.nav_sites_fragment -> {
navController.popBackStack(R.id.sitesFragment, true)
navController.navigate(R.id.sitesFragment)
}
在Fragments中,点击事件(在RecyclerViews中主要指向其他Fragment,如SiteFragment、ContactFragment、TaskFragment等)处理如下:
if (!navController.popBackStack(R.id.siteFragment, false)) {
// not in BackStack
navController.navigate(R.id.action_contactFragment_to_siteFragment)
}
问题是,即使我在Activity 操作中弹出BackStack,来自Fragment 操作的片段仍保留在后台堆栈中。..
我认为我对 backstack 的理解不正确,因为我不确定发生了什么 - 但也许我创建了两个独立的 NavController 实例?
编辑:虽然我看过这篇帖子How to clear navigation Stack after navigating to another fragment in Android,但我仍然发现相同的行为。 Activity 中的 PopBackStack 没有清除添加到 backstack 的 Fragments..
例如:
SITES -> SITE -> CONTACT -> CONTACTS 应该删除前三个片段,但 backpress 仍然返回到 CONTACT..
【问题讨论】:
标签: kotlin android-navigation back-stack fragment-backstack