gpt4 book ai didi

android - 导航组件 : NavHostFragment inside a fragment

转载 作者:行者123 更新时间:2023-12-04 23:53:32 25 4
gpt4 key购买 nike

我有这个带有导航组件的选项卡式 UI 和处理选项卡的 BottomNavigationView。我的用例涉及这些选项卡 fragment 之一,以拥有自己的 BottomNavigationView

我不认为 nested navigation graphs对我有用,因为我需要有一个内部 NavHostFragment 和第二个 BottomNavigationView

所以我在我希望托管我的内部导航图的 fragment 中。它包含一个像这样的 fragment 。

<androidx.fragment.app.FragmentContainerView
android:id="@+id/inner_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"

我需要一种方法来获取上述 fragment 的导航 Controller 。

通常,当您在 Activity 中时,您会使用您为 fragment 提供的 id 从 supportFragmentManager 调用 findFragmentById

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

所以我尝试从我的内部 fragment 中调用 Activity 对象

requireActivity().supportFragmentManager.findFragmentById(R.id.inner_host_fragment)

但是 findFragmentById 返回 null。

最佳答案

尝试从supportFragmentManager获取NavHostFragment,然后再获取navController

val navHostFragment =
requireActivity().supportFragmentManager.primaryNavigationFragment as NavHostFragment
val navController = navHostFragment.navController

感谢@ianhanniballake,您需要使用 childFragmentManager,因为您当前的 fragment 是 fragment 的子 fragment 。

所以尝试改用:

val navHostFragment =
childFragmentManager.primaryNavigationFragment as NavHostFragment
val navController = navHostFragment.navController

更新:

throws this java.lang.NullPointerException: null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment

因此,来自评论的解决方案:

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

并将 nav_host_fragment 替换为内部 NavHostFragment 的 id。

关于android - 导航组件 : NavHostFragment inside a fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67012847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com