首页 > 解决方案 > 如何在活动中获取 navController?

问题描述

我使用 Jetpack Navigation 在片段和活动之间导航。所以,我在布局中有MainActivity一个。FragmentContainerView我可以轻松地从片段导航到片段/活动。但是,我找不到如何从一个活动导航到另一个活动/片段的方法navController

例如,我从片段 FA 调用navController.navigate()活动 A。现在,我想从活动 A 导航到活动 B 或片段 FB。

我已经尝试过了:

val host = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = host.navController

但总是得到这个错误

null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment

谢谢!

标签: androidandroid-jetpackandroid-jetpack-navigation

解决方案


导航组件指南中的注释

注意:导航组件专为具有一个主要活动和多个片段目的地的应用程序而设计。主要活动与导航图相关联,并包含一个 NavHostFragment,负责根据需要交换目的地。在具有多个活动目的地的应用程序中,每个活动都有自己的导航图。

您不应该使用导航组件从一个活动导航到另一个活动。它用于交换 Fragment 容器上的 Fragment。

您可以navController使用activity

val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

您还必须添加android:name="androidx.navigation.fragment.NavHostFragment"到您的片段容器

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
/>

推荐阅读