有没有办法在新版Google Maps Android API v2中的MapView对象中准备好GoogleMap时收到通知?

时间:2013-01-21 21:32:08

标签: android google-maps-android-api-2

我现在正在我的应用中实施新的Google Maps Android API,并且在加载地图时我想做一些事情,例如将地图移动到当前位置并在那里显示标记并启用某些功能像卫星视图一样叠加。但是,当我尝试访问Mapview的getMap()时,我遇到了NPE,因为GoogleMap对象尚未就绪。

有没有办法检测MapView的GoogleMap何时准备就绪?我发现CommonsWare建议处理SupportMapFragment并检测getMap()何时不会为null,但MapView的等效事件是什么?

CommonsWare对SupportMapFragment的建议:How do I know the map is ready to get used when using the SupportMapFragment?

这似乎有点破碎,没有办法确定GoogleMap对象何时准备就绪,以便我们可以完成所有这些设置。

1 个答案:

答案 0 :(得分:2)

要直接使用MapView,您需要确保将Activity生命周期方法转发到MapView。

E.g。设置它,你可以在你的onCreate()

中做到这一点
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.raw_mapview_demo);

    mMapView = (MapView) findViewById(R.id.map);
    mMapView.onCreate(savedInstanceState);

    setUpMapIfNeeded();
}

private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((MapView) findViewById(R.id.map)).getMap();
        if (mMap != null) {
            setUpMap();
        }
    }
}

该代码取自Play服务库附带的Google示例代码。您还需要路由onDestroy(),onResume()和onPause()。

仅供参考,您需要检查MapView和MapFragment的空指针,因为用户可能没有安装Google Play服务。如果未安装,则用户应提示安装APK,然后您可以返回此活动。

希望有所帮助。

赖安