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

Jetpack Compose导航:如何跨Activity跳转至另一个导航图

跨Activity导航实现方案

要在Compose中通过Navigation Component直接跳转到另一个Activity的导航图,核心是利用**深层链接(Deep Link)**让Navigation组件自动处理Activity跳转,无需手动调用startActivity。具体步骤如下:

1. 给目标导航图配置深层链接

在Activity2对应的导航图nav_graph2.xml中,给起始Fragment(或整个导航图)添加深层链接配置:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/graph2"
    app:startDestination="@id/fragmentA">

    <fragment
        android:id="@+id/fragmentA"
        android:name="com.yourpackage.FragmentA">
        <!-- 自定义深层链接URI,格式可自行定义 -->
        <deepLink app:uri="app://yourapp/activity2_entry" />
    </fragment>

    <!-- 其他Fragment配置 -->
</navigation>

2. 在Manifest中注册Activity的深层链接过滤器

打开AndroidManifest.xml,给Activity2添加<intent-filter>,让系统识别并处理刚才定义的深层链接:

<activity
    android:name=".Activity2"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- 和导航图中定义的URI保持一致 -->
        <data android:scheme="app" android:host="yourapp" android:path="/activity2_entry" />
    </intent-filter>
</activity>

3. 在Compose中通过NavController触发跳转

在Activity1的HomeScreen可组合项中,拿到NavHostController实例,在按钮点击事件里调用navigate()方法传入深层链接URI即可:

@Composable
fun HomeScreen(navController: NavHostController) {
    Button(
        onClick = {
            // 直接导航到深层链接,Navigation会自动启动Activity2并加载Graph2
            navController.navigate("app://yourapp/activity2_entry")
        }
    ) {
        Text("跳转到Activity2的导航图")
    }
}

如果想要更类型安全的写法,可以用NavDeepLinkRequest构建请求:

import android.net.Uri
import androidx.navigation.navDeepLinkRequest

// ...

Button(onClick = {
    val deepLinkRequest = navDeepLinkRequest {
        uri = Uri.parse("app://yourapp/activity2_entry")
    }
    navController.navigate(deepLinkRequest)
}) {
    Text("跳转到Activity2的导航图")
}

补充说明

这种方式本质是Navigation组件通过深层链接机制间接启动Activity2,全程不需要手动调用startActivity,完全符合Navigation的使用规范。同时,Activity2启动后会自动加载对应的Graph2导航图,和原有配置完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:01:12