在 Android 应用程序中,我使用导航组件和导航图进行以下导航:
片段A -> 片段B -> 片段C -> 片段D -> 片段E
无论如何,后退导航必须定制:
片段A <- Fragment B <- Fragment C <- Fragment D
片段A <- Fragment E
我可以直接在 xml Nav Graph 中为 actionDtoE 设置 app:popUpTo 和 app:popUpToInclusive ,因为只有当我到达 Fragment 时,从片段 B 和片段 C 的后堆栈中“删除”必须是有条件的E.
如何使用导航组件有条件地从后台堆栈中删除片段?
您可以在 activiy 中使用
onBackPressed
或在片段中使用回调来覆盖 FragmentD 返回操作。就我而言,我使用了活动。
片段A <- Fragment E
override fun onBackPressed() {
if (navController.currentDestination?.id == R.id.EFragment && condition) {
navController.popBackStack(R.id.aFragment, false)
return
}
super.onBackPressed()
}
其他变化:
片段A <- Fragment E =>
navController.popBackStack(R.id.aFragment, true)
片段B <- Fragment E =>
navController.popBackStack(R.id.bFragment, false)