You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Deep Link导航至Fragment C且不添加其他页面到返回栈

实现Deep Link直达Fragment C且不保留其他Fragment返回栈

针对你描述的嵌套导航图场景,有几种可行的方案来实现Deep Link直达Fragment C时,不将Fragment A、B加入返回栈:

方案1:在Deep Link配置中直接指定返回栈清理规则(推荐)

在nav_graph_b.xml里给Fragment C的Deep Link添加导航动作的清理属性,精准控制返回栈:

<fragment
    android:id="@+id/fragment_c"
    android:name="com.yourpackage.FragmentC">
    <deepLink app:uri="your_app://path/to/c">
        <action
            app:destination="@id/fragment_c"
            <!-- 清理nav_graph_b内的所有栈元素(包括Fragment B) -->
            app:popUpTo="@id/nav_graph_b"
            app:popUpToInclusive="true"
            <!-- 可选:避免重复创建Fragment C实例 -->
            app:launchSingleTop="true" />
    </deepLink>
</fragment>

如果需要连Fragment A也从返回栈中移除,只需把app:popUpTo的值改为nav_graph_a的id,同时保持popUpToInclusive="true"即可,此时返回栈仅保留Fragment C。

方案2:在宿主Activity中手动拦截并配置导航选项

在承载nav_graph_a的Activity里,拦截Deep Link的跳转请求,通过NavOptions强制清空现有返回栈后再导航:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_host)
    val navController = findNavController(R.id.nav_host_fragment)

    intent?.data?.takeIf { it.toString().startsWith("your_app://path/to/c") }?.let { uri ->
        val clearStackOptions = NavOptions.Builder()
            // 清空整个宿主导航图的所有栈元素
            .setPopUpTo(navController.graph.id, inclusive = true)
            .build()
        navController.navigate(uri, clearStackOptions)
    }
}

如果你的Activity是singleTop启动模式,记得在onNewIntent里也做相同处理,避免重复跳转。

方案3:动态修改嵌套导航图的起始目标(临时场景适用)

如果只是特定业务场景需要跳过Fragment B的启动,可以在Deep Link触发时,动态修改nav_graph_b的起始目标为Fragment C:

val navGraphB = navController.getGraph(R.id.nav_graph_b)
navGraphB.startDestination = R.id.fragment_c
navController.setGraph(navGraphB)
// 之后再执行Deep Link导航
intent?.data?.let { navController.navigate(it) }

这种方法灵活性较低,适合不需要频繁切换导航逻辑的场景。

内容的提问来源于stack exchange,提问作者Augusto Carmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:35:14