使用动态 navGraph startDestination 从 backstack 中删除片段

Removing a fragment from backstack with a dynamic navGraph startDestination

我有一个带有 navGraph 的 Activity,它在创建 Activity 时有条件地选择 startDestination。

     private suspend fun checkStatusAndNavigate(userID: Int) {
        val navController = findNavController(nav_host_container)
        val user = getUserFromDB(userID)
        val dateNow = Date((if (prefSaved) prefTime() else System.currentTimeMillis())
        val navGraph = navController.navInflater.inflate(nav_graph).apply {
            // NavGraph inflates with one of three possible starting points: A, B, or C.
            startDestination = when {
                checkDate(dateNow) == DateCheck.OldDate -> R.id.fragment_a
                !user.hasOptedIn -> R.id.fragment_b
                else -> R.id.fragment_c
            }
        }
        navController.setGraph(navGraph)
    }

navController.setGraph(navGraph)之后启动startDestination。这按预期工作。

片段 B 的唯一目的地是片段 C。但是当用户在片段 C 中并执行 onBackPressed() 时,我想跳过片段 B,return 到任何所谓的 Activity(有几个选项,所以覆盖 onBackPressed 不是一个很好的选择)。

我认为这不是 popTo 或 popToInclusive 问题。我不想清除后台。如果可能的话,我只想阻止片段 B 进入后台堆栈。

如果您不希望从 C 返回访问 B,那么您应该创建一个 popTo=BpopToInclusive=truedestination=C 的操作。