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

时间:2018-10-25 10:35:11

标签: android kotlin navigation android-architecture-components

在学习了有关新架构组件的基础知识之后,我决定应用这些知识并进行一个演示项目。在这个项目中,我一直在使用Google Map。

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

<fragment android:layout_width="match_parent" android:layout_height="match_parent"
          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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

希望有帮助