按下后退按钮会回到我的片段,但我不想



我使用的是导航组件,我有一个图,其中有3个目的地

FragmentA() -> FragmentB() -> FragmentC()

当我从FragmentA()转到FragmentB()时,当按下backButton时,我不想再次转到FragmentA(),而是想跳到FragmentC(),我在从FragmentA()导航到FragmentB()的操作中将popUpInclusive设置为true,并将popUpTo设置为FragmentC(),但当我在FragmentB()上按下backButton后,它仍然转到FragmentA()

这里怎么了?

通过在主机活动中添加一个监听器并从中弹出后台来解决此问题

override fun onBackPressed() {
when(navController.currentDestination?.id){
R.id.navigation_success -> {
navController.popBackStack(R.id.navigation_success,true)
navController.navigate(R.id.navigation_orders)
}
else -> navController.navigateUp()
}
}

navigateUp和onBackPressed之间有区别,这两种方式不同,如果我们使用navigateUp,我们需要触摸导航图,从那里我们可以设置popupTo和popupInclusive,但如果我们只使用onBackPressed按钮,我们需要将此侦听器连接到我们的主主机活动中

// This callback will only be called when MyFragment is at least Started.
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
// Handle the back button event
}

相关内容

最新更新