要处理不同的返回堆栈,可以使用Android导航架构组件中的NavGraphBuilder和NavOptionsBuilder来构建导航图和导航选项。
首先,创建一个导航图,并定义不同的目的地(Destination)和动作(Action)。
val navController = findNavController(R.id.nav_host_fragment)
val navGraph = navController.navInflater.inflate(R.navigation.nav_graph)
// 添加目的地
val destination1 = FragmentNavigatorDestination(
FragmentNavigator(this),
R.id.fragment1
)
val destination2 = FragmentNavigatorDestination(
FragmentNavigator(this),
R.id.fragment2
)
navGraph.addDestination(destination1)
navGraph.addDestination(destination2)
// 添加动作
val action1to2 = NavGraphNavigator(this).createAction(
R.id.action_fragment1_to_fragment2
)
navGraph.addAction(action1to2)
navController.graph = navGraph
然后,在需要处理返回堆栈的位置,使用NavOptionsBuilder来定义导航选项。
val navOptions = NavOptionsBuilder()
.setPopUpTo(R.id.fragment1, false) // 返回堆栈中指定目的地之前的所有目的地将被弹出
.build()
// 执行导航
navController.navigate(R.id.action_fragment1_to_fragment2, null, navOptions)
在上面的示例中,当从Fragment2返回到Fragment1时,将弹出返回堆栈中Fragment1之前的所有目的地,这样用户再次返回时将回到应用程序的起始位置。
请注意,上述代码示例是使用Kotlin编写的。如果你使用的是Java,可以将代码稍作修改以适应Java语法。