如何使用导航架构组件查找子片段

Posted

技术标签:

【中文标题】如何使用导航架构组件查找子片段【英文标题】:How to find a child Fragment with Navigation Architecture components 【发布时间】:2019-03-29 22:39:13 【问题描述】:

在学习了有关新架构组件的基础知识后,我决定应用这些知识并开展一个演示项目。在这个项目中,我一直在使用谷歌地图。

在我的 navHost 片段中,其中一个片段以这种方式显示谷歌地图

<fragment android:layout_ android:layout_
          android:id="@+id/map"
          android:name="com.google.android.gms.maps.SupportMapFragment"></fragment>

从我一直试图获取这个片段类的代码来看,相关的代码是这样的

private val host: NavHostFragment? by lazyFast 
    activity?.supportFragmentManager
        ?.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment?

在 onCreateView 我试过这个

val mapFragment = host?.childFragmentManager?.findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(this)

它给了我这个错误

运行时异常:非 null 不能转换为 null

有人知道我做错了什么吗?

【问题讨论】:

相关kotlin.TypeCastException: null cannot be cast to non-null type 【参考方案1】:

此错误与导航组件无关。例如,host?.childFragmentManager?.findFragmentById(R.id.map) as SupportMapFragment 实际上找到了一个嵌套导航图。

如果您只想访问您的子片段,可以通过这种方式重构您的代码

val mapFragment = this.childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment

希望对你有帮助

【讨论】:

以上是关于如何使用导航架构组件查找子片段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

使用导航架构组件添加(而不是替换)片段

在 FAB 单击时导航到片段(导航架构组件)

关于android导航架构组件的问题

底部应用栏在使用片段导航时向上/向下滑动(导航架构组件)

导航架构组件 - 导航抽屉