Google Maps Android:java.lang.ClassCastException:android.widget.FrameLayout无法转换为com.google.android.gms.maps.SupportMapFragment

时间:2019-03-20 17:14:48

标签: android android-fragments

我正在使用viewPager,其中一个选项卡是列表视图,一个选项卡是Map。我定义的MapFragment如下:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    class="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map_fragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

然后在onViewCreated函数中包含以下行:

val mapFragment = fragmentManager?.findFragmentById(map_fragment.id) as SupportMapFragment

此行引发错误:

android.widget.FrameLayout cannot be cast to com.google.android.gms.maps.SupportMapFragment

注意:我使用onViewCreated()函数是因为在onCreate()中,我在“ map_fragment”上得到了一个空指针。

“我的视图寻呼机”执行以下操作来创建片段:

 MapViewFragment.newInstance(location, selection)

我对Google Play和地图也有正确的清单。

为什么我的片段变成了FrameLayout?这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

我认为ViewPager不支持该片段。您必须使用

<com.google.android.gms.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/google_map_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:context=".MapViewFragment"/>

然后您需要在onViewCreated()内部

  mapView = rootView.findViewById(google_map_view.id) as MapView
  mapView.getMapAsync(this)
  //most important use onCreate;
  mapView.onCreate(arguments)

显示地图。