android google map supportmap片段无法在片段中初始化

Posted

技术标签:

【中文标题】android google map supportmap片段无法在片段中初始化【英文标题】:android google map supportmap fragment can't be initialized in fragment 【发布时间】:2020-11-26 07:08:12 【问题描述】:

我正在尝试使用片段在 android 中创建实现 Google-Map:

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? 
        return inflater.inflate(R.layout.fragment_map_test, container, false)
    

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        //the line below get's error
        val mapFragment = view?.findViewById<View>(R.id.sp_map_test) as SupportMapFragment
        mapFragment.getMapAsync(this)
    

我的 XML :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MapTestFragment">


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


</LinearLayout>

但它找不到 SupportMap 片段。我该如何解决这个问题?

我也试过这个 - val mapFragment = parentFragmentManager.findFragmentById(R.id.sp_map_test) as SupportMapFragment

null 不能转换为非 null 类型 com.google.android.gms.maps.SupportMapFragment

【问题讨论】:

【参考方案1】:

插入

val mapFragment = view?.findViewById<View>(R.id.sp_map_test) as SupportMapFragment

val mapFragment = parentFragmentManager.findFragmentById(R.id.sp_map_test) as SupportMapFragment

使用

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

参考MapFragment Referance

【讨论】:

【参考方案2】:

你必须把它放在onCreateView中

override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View? 
        val view = inflater.inflate(R.layout.fragment_map_test, container, false)
        val mapFragment = view?.findViewById<View>(R.id.sp_map_test) as SupportMapFragment
        mapFragment.getMapAsync(this)
    

或者您也可以从模板创建支持地图片段

在 Android Studio 中选择 New -> Fragment -> Google Map Fragment

【讨论】:

以上是关于android google map supportmap片段无法在片段中初始化的主要内容,如果未能解决你的问题,请参考以下文章

com.google.android.gms.maps.MapFragment:无法解析符号“地图”

com.google.android.maps 在 Android Studio 中不存在

import com.google.android.maps.geopoint 无法解析

膨胀类 com.google.android.maps.MapView 时出错

错误:com.google.maps.android.kml 包不存在

com.google.android.gms:play-services-maps 的最佳 sdk 版本是啥?