我已经将对象保存到名为Memories的HashMap中,我想拉出一个BitMap和一个Title等,并在点击它时将其设置为Markers InfoWindow。我有InfoWindow显示图像和标题等,但是当我添加另一个标记并创建另一个Memories对象时。两个标记都显示最新数据。
@Override
public void showMemory(final Memory memory) {
Toast.makeText(getApplicationContext(), "The Minions have saved your Memory!", Toast.LENGTH_SHORT).show();
mMap.addMarker(new MarkerOptions().title(memory.getTitleMem()).position(memory.getLocationMem()));
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
markers.put(marker.getId(), memory);
View view = getLayoutInflater().inflate(R.layout.marker_layout, null);
ImageView markerImage = (ImageView)view.findViewById(R.id.markerImage);
TextView markerTitle = (TextView)view.findViewById(R.id.markerTitle);
TextView markerDate = (TextView)view.findViewById(R.id.markerDate);
if(markers != null && markers.size() > 0){
markerImage.setImageBitmap(markers.get(marker.getId()).getImageMem());
markerTitle.setText(markers.get(marker.getId()).getTitleMem());
markerDate.setText(markers.get(marker.getId()).getFormatedDate());
}
return view;
}
});
mMap.moveCamera(CameraUpdateFactory.newLatLng(memory.getLocationMem()));
}
这是我将对象保存到HashMap并显示标记内容的地方。我是否在标记中保存并显示错误的数据?
答案 0 :(得分:1)
您尝试使用final
并不能满足您的需求。
为每个未完成的标记调用InfoWindow
适配器。这是您在GoogleMap
上配置的内容,而不是在个人Marker
上配置的内容。这意味着每个未结getInfoContents()
都会调用Marker
,这会导致您使用相同的Marker
更新每个Memory
的数据。
解决此问题:
步骤1:将markers.put(marker.getId(), memory);
移出getInfoContents()
并直接移至showMemory()
。您的addMarker()
来电会返回Marker
,您可以使用getId()
来呼叫setInfoWindowAdapter()
。
第2步:仅为GoogleMap
致电TDateTime
。