getMap()在android片段中的google map中的SupportMapFragment中为null

时间:2016-06-09 07:22:10

标签: android google-maps android-layout

我在片段中使用谷歌地图并在调用getMap()时获取null,这是我的代码:

在我的MapViewFragment

    private GoogleMap mGoogleMap;

我在onCreate()方法中的这一行得到null ...

        mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

在fragment_map_view文件中

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

4 个答案:

答案 0 :(得分:2)

不推荐使用getMap方法。您应该使用getMapAsync

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...

        ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
    }

     @Override
    public void onMapReady(final GoogleMap googleMap) {
        mGoogleMap = googleMap;

        // Do something with your map
    }
}

答案 1 :(得分:1)

您是否添加了权限和Google API密钥?

这是我的代码来自项目,在OnCreate()

中调用此函数
private void CheckGoogleMap()
    {

        try {
            if (googleMap == null) {
                googleMap = ((MapFragment) getFragmentManager().
                        findFragmentById(R.id.map)).getMap();
            }
            googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

    }
XML文件中的

<fragment
                android:id="@+id/map"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                class="com.google.android.gms.maps.MapFragment"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true">
清单文件中的

 <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="com.example.googlemaps.permission.MAPS_RECEIVE" />
        <uses-permission android:name="android.permission.INTERNET"/>


    <permission         android:name="com.example.googlemaps.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature    android:glEsVersion="0x00020000" android:required="true" />

在Manifest文件中关闭应用程序TAG之前添加此

 <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR API KEY" />

在Gradle中添加

compile 'com.google.android.gms:play-services:8.1.0'

答案 2 :(得分:1)

您可以使用getMapAsync执行此操作,在onMapReady方法中,您将获得地图对象。

public class YourMapActivity extends FragmentActivity implements OnMapReadyCallback {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
}

 @Override
public void onMapReady(final GoogleMap googleMap) {

   // you will get map object hare 
    mGoogleMap = googleMap;

   // now perform operations on that.
   }
}

答案 3 :(得分:0)

我明白了,我想我应该为未来的读者发帖......

实际上,因为我在一个片段中调用了GoogleMap,所以在行中..

mGoogleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

而不是

getFragmentManager(), getSupportFragmentManager() should be used in fragments.

更正了一个 -

mGoogleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();