Android 使用导航组件有条件地从后台删除片段

问题描述 投票:0回答:1

在 Android 应用程序中,我使用导航组件和导航图进行以下导航:

片段A -> 片段B -> 片段C -> 片段D -> 片段E

无论如何,后退导航必须定制:

片段A <- Fragment B <- Fragment C <- Fragment D

片段A <- Fragment E

我可以直接在 xml Nav Graph 中为 actionDtoE 设置 app:popUpToapp:popUpToInclusive ,因为只有当我到达 Fragment 时,从片段 B 和片段 C 的后堆栈中“删除”必须是有条件的E.

如何使用导航组件有条件地从后台堆栈中删除片段?

android navigation fragment navgraph
1个回答
0
投票

您可以在 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)

© www.soinside.com 2019 - 2024. All rights reserved.