簡體   English   中英

使用動態 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。 但是當用戶在 Fragment C 並執行 onBackPressed() 時,我想跳過 Fragment B,並返回到所謂的 Activity(有幾個選項,所以覆蓋 onBackPressed 不是一個好選擇)。

我不認為這是 popTo 或 popToInclusive 問題。 我不想清除后台堆棧。 如果可能的話,我只想阻止 Fragment B 進入后台。

如果您不想從 C 背面訪問 B,那么您應該創建一個動作,即popTo=BpopToInclusive=truedestination=C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM