0

我现在在我的应用程序中实现了新的 Google Maps Android API,当地图加载时我想做一些事情,例如将地图移动到当前位置并在那里显示一个标记并启用某些叠加层,如卫星视图。但是,当我尝试访问 Mapview 的 getMap() 时遇到了 NPE,因为 GoogleMap 对象还没有准备好。

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

CommonsWare 对 SupportMapFragment 的建议:在使用 SupportMapFragment 时,我如何知道地图已准备好使用?

这似乎有点坏了,没有办法确定 GoogleMap 对象何时准备就绪,以便我们可以进行所有这些设置。

4

1 回答 1

2

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

例如,要设置它,您可以在 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 Services 库中包含的 Google 示例代码。您还需要路由 onDestroy()、onResume() 和 onPause()。

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

希望有帮助。

瑞安

于 2013-01-21T21:57:51.010 回答