【问题标题】:Removing a fragment from backstack with a dynamic navGraph startDestination使用动态 navGraph startDestination 从 backstack 中删除片段
【发布时间】:2020-06-23 17:15:00
【问题描述】:

我有一个带有 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 启动。这按预期工作。

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

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

【问题讨论】:

  • 如果您不希望 B 可以从 C 背面访问,那么您应该创建一个 popTo=B、popToInclusive=true 且目标为 C 的 Action。跨度>
  • 谢谢,加博尔!你是对的。

标签: android android-jetpack android-architecture-navigation android-jetpack-navigation


【解决方案1】:

如果您不希望从 C 后面访问 B,那么您应该创建一个 Action,它是 popTo=B、popToInclusive=true 和 destination=C。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多