[英]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。 但是當用戶在 Fragment C 並執行 onBackPressed() 時,我想跳過 Fragment B,並返回到所謂的 Activity(有幾個選項,所以覆蓋 onBackPressed 不是一個好選擇)。
我不認為這是 popTo 或 popToInclusive 問題。 我不想清除后台堆棧。 如果可能的話,我只想阻止 Fragment B 進入后台。
如果您不想從 C 背面訪問 B,那么您應該創建一個動作,即popTo=B
、 popToInclusive=true
和destination=C
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.