0

Google マップ V2 を使用するアプリを開発しています。マップ フラグメントが読み込まれ、マーカーが描画されると、アクション バーにボタンが表示され、プレース ファインダーとして機能する結果を得るために別のアクティビティが呼び出されます。

このアクティビティ結果で、次のようなmymMarkersを検索します。HashMap<Long, Marker>

if (mMarkers.containsKey(place.id)) {
    mMarkers.get(place.id).showInfoWindow();
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(updateCamera(new LatLng(place.lat, place.lng))));
} else {
    Marker marker = mMap.addMarker(
        new MarkerOptions()
        .position(markerPos)
        .title(place.name)
    );
    marker.showInfoWindow();
    mMarkers.put(place.id, marker); // if it´s not on the map I put it
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(updateCamera(new LatLng(place.lat, place.lng))));
}

実装済みなので、マーカー infoWindow を表示しonInfoWindowClickます。

ここで主な問題が発生します。これは私のonInfoWindowClickイベントです:

@Override
public void onInfoWindowClick(Marker marker) {
    Long placeId = null;
    if (mMarkers.containsValue(marker)) {
        Iterator<Entry<Long, Marker>> it = mMarkers.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Long, Marker> pairs = (Map.Entry<Long, Marker>)it.next();
            if (pairs.getValue().getId().equals(marker.getId())) {
                placeId = pairs.getKey();
            }
        }
        if (placeId != null) {
            Intent intent = new Intent(mContext, PlaceActivity.class);
            intent.putExtra("placeId", placeId);
            startActivity(intent);
        }
    }
}

マーカー オブジェクトへの参照を確認するmMarkers.containsValue(marker)と、上記の関数で同じマップにあるものとは異なりonActivityResultます。

そのマーカーオブジェクトの新しいインスタンスを作成していないので、その参照が変更される理由がよくわかりません。

- - アップデート - -

infoWindow を表示せずに試してみましたが、完璧に動作します。なぜこれが起こるのか、またはこれに対する回避策はありますか?

よろしくお願いします!

4

0 に答える 0