我使用的是导航组件,我有一个图,其中有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
}