You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用SupportMapFragment报has not been attached yet错误如何解决

问题原因
  • 你手动创建了一个全新的SupportMapFragment实例,这个实例既没有和布局中声明的地图Fragment绑定,也没有被添加到FragmentManager完成attach流程,直接调用getMapAsync自然会抛出未attach的异常。
  • 查找布局中地图Fragment的调用对象错误,你需要通过当前自定义MapFragment的childFragmentManager来查找布局里的SupportMapFragment,而非你手动创建的空实例的childFragmentManager。
修正后的代码
class MapFragment : Fragment(), OnMapReadyCallback {

    private lateinit var googleMap: GoogleMap
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View {
        val view = inflater.inflate(R.layout.fragment_map, container, false)
        // 从当前Fragment的childFragmentManager中获取布局声明的SupportMapFragment
        val supportMapFragment = childFragmentManager.findFragmentById(R.id.google_map) as SupportMapFragment
        supportMapFragment.getMapAsync(this)
        return view
    }

    override fun onMapReady(map: GoogleMap) {
        googleMap = map
        // 此处添加地图初始化后的业务逻辑
    }
}
注意事项
  • 嵌套Fragment场景必须使用父Fragment的childFragmentManager查找子Fragment,不能使用宿主Activity的supportFragmentManager,否则也会出现找不到Fragment的异常。
  • 如果需要避免类型强转风险,可以配合ViewBinding获取FragmentContainerView实例后再获取关联的Fragment。

内容的提问来源于stack exchange,提问作者tonileipo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:48:01