【发布时间】: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