Vah*_*hid 5 android android-fragments kotlin android-architecture-navigation
我有这个选项卡式 UI,带有导航组件和BottomNavigationView处理选项卡的组件。我的用例涉及这些选项卡片段之一,以拥有BottomNavigationView自己的选项卡片段。
我认为嵌套导航图对我不起作用,因为我需要有一个 insideNavHostFragment和第二个BottomNavigationView.
所以我在我希望托管内部导航图的片段中。它包含这样的片段。
<androidx.fragment.app.FragmentContainerView
android:id="@+id/inner_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来获取上述片段的导航控制器。
通常,当您在进行活动时,您会使用findFragmentById您supportFragmentManager为片段提供的 id 来调用 。
val navHostFragment = supportFragmentManager.findFragmentById(R.id.outer_nav_host) as NavHostFragment
Run Code Online (Sandbox Code Playgroud)
所以我尝试从我的内部片段中的活动对象上调用它
requireActivity().supportFragmentManager.findFragmentById(R.id.inner_host_fragment)
Run Code Online (Sandbox Code Playgroud)
但findFragmentById返回null。
NavHostFragment尝试从 中获取supportFragmentManager,然后再获取navController。
val navHostFragment =
requireActivity().supportFragmentManager.primaryNavigationFragment as NavHostFragment
val navController = navHostFragment.navController
Run Code Online (Sandbox Code Playgroud)
感谢@ianhanniballake,您需要使用 ,childFragmentManager因为您当前的片段是片段的子片段。
所以尝试改用:
val navHostFragment =
childFragmentManager.primaryNavigationFragment as NavHostFragment
val navController = navHostFragment.navController
Run Code Online (Sandbox Code Playgroud)
更新:
抛出此 java.lang.NullPointerException: null 无法转换为非 null 类型 androidx.navigation.fragment.NavHostFragment
因此,解决方案来自评论:
val navHostFragment = childFragmentManager.findFragmentById(R.id.nav_host_fragment)
as NavHostFragment
Run Code Online (Sandbox Code Playgroud)
并替换nav_host_fragment 为内部 NavHostFragment 的 id。
| 归档时间: |
|
| 查看次数: |
3237 次 |
| 最近记录: |