0

現在、アプリ内に新しいGoogle Maps Android APIを実装しています。地図を現在の場所に移動してマーカーを表示したり、次のような特定のオーバーレイを有効にしたりするなど、地図が読み込まれたときに実行したいことがいくつかあります。衛星ビュー。ただし、GoogleMapオブジェクトの準備ができていないため、MapviewのgetMap()にアクセスしようとすると、NPEが発生します。

MapViewのGoogleMapの準備ができたことを検出する方法はありますか?SupportMapFragmentを処理し、getMap()がnullにならない場合を検出するための、CommonsWareの提案を見つけましたが、MapViewの同等のイベントは何でしょうか?

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サービスライブラリに含まれているGoogleのサンプルコードから取得されています。また、onDestroy()、onResume()、およびonPause()をルーティングする必要があります。

参考までに、ユーザーがGoogle Playサービスをインストールしていない可能性があるため、MapViewとMapFragmentの両方のnullポインタを確認する必要があります。インストールされていない場合、ユーザーはAPKをインストールするためのプロンプトを受け取り、このアクティビティに戻ることができます。

お役に立てば幸いです。

ライアン

于 2013-01-21T21:57:51.010 に答える