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

如何在Jetpack Navigation中启动第二个Activity

解决多Activity场景下Jetpack Navigation的跳转问题

我来帮你搞定这个多Activity使用Jetpack Navigation的跳转难题,其实核心是搞清楚在Activity层级怎么正确获取NavController,以及多Activity导航的配置细节。

1. 在Activity中获取NavController的正确方式

你提到的Navigation.findNavController(view)是针对Fragment内部绑定了NavHost的View设计的,在Activity层面我们需要换一种方式获取:

方法一:直接通过Activity和NavHostFragment的ID获取

假设你的FirstActivity布局里有一个ID为nav_host_fragment的NavHostFragment,那么可以在Activity代码里这样写:

// 在FirstActivity的按钮点击事件或其他合适位置
val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
navController.navigate(R.id.nav_graph_actFirstActvity)

方法二:通过SupportFragmentManager获取NavHostFragment

如果是在Activity的onCreate方法中,也可以先拿到NavHostFragment实例,再获取NavController:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_first)
    
    val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController = navHostFragment.navController
    
    // 后续用navController执行跳转逻辑
}

2. 多Activity导航图的配置补充

你当前的导航图配置方向是对的,可以补充一些细节让逻辑更清晰:

  • 如果目标Activity有自己的子导航逻辑,可以用<include>标签把它的子导航图合并进来,比如:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@+id/nav_graph_firstActvity">

    <activity
        android:id="@+id/nav_graph_firstActvity"
        android:name="io.androidedu.FirstActivity"
        android:label="First Activity">
        <action
            android:id="@+id/nav_graph_actFirstActvity"
            app:destination="@id/nav_graph_secondActvity" />
    </activity>

    <activity
        android:id="@+id/nav_graph_secondActvity"
        android:name="io.androidedu.SecondActivity"
        android:label="Second Activity">
        <!-- 引入SecondActivity自己的子导航图 -->
        <include app:graph="@navigation/nav_graph_second" />
    </activity>
</navigation>

3. 关键注意事项

  • 每个Activity都需要配置NavHostFragment:不管是FirstActivity还是SecondActivity,它们的布局文件里都得有一个NavHostFragment容器,比如:
<!-- FirstActivity的布局示例 -->
<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph_main" />

这里的app:navGraph要指向你定义的包含多Activity的主导航图,或者对应Activity的子导航图。

  • 跨Activity跳转时,Navigation会自动帮你创建Intent,不需要手动编写startActivity相关代码,直接用navController.navigate()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:11:18