我正在开发一个使用 Google Maps V2 的应用程序。当加载地图片段并绘制标记时,我在操作栏上有一个按钮,该按钮调用另一个活动以获得将充当位置查找器的结果。
在此活动结果中,我搜索我mMarkers
的,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 并且效果很好。任何想法为什么会发生这种情况或任何解决方法?
非常感谢!