android - 如何在活动中获取 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
谢谢!
解决方案
导航组件指南中的注释
注意:导航组件专为具有一个主要活动和多个片段目的地的应用程序而设计。主要活动与导航图相关联,并包含一个 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"
/>
推荐阅读
- makefile - Makefile 在条件内扩展变量取决于定义的顺序
- netsuite - 套件脚本。如何从客户记录中检索主要联系人。如果类型是公司
- javascript - 捕捉承诺拒绝
- javascript - 如何在javascript中操作数组的值?
- c# - 在C#中填写openingstime的Combobox并停止直到delivery Time
- logstash-grok - 我可以有一个只有内部 id 和主机名的 grok 表达式吗?
- c# - 使用命名空间将类序列化为 XML
- typo3 - 在 TYPO3 V9 中用流体覆盖页面属性
- symfony - 错误代码 1 缓存:在作曲家要求期间清除
- ruby-on-rails - 如何在 Rails 邮件中显示图像?