gpt4 book ai didi

java - 无法显示来自 HashMap 的单个标记信息

转载 作者:行者123 更新时间:2023-11-30 01:21:56 25 4
gpt4 key购买 nike

我已将对象保存到名为 Memories 的 HashMap 中,我想提取一个 BitMap 和一个 Title 等,并在我单击它时将其设置为 Markers InfoWindow。我有显示图像和标题等的信息窗口,但是当我添加另一个标记并创建另一个内存对象时。两个标记都显示最新数据。

@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 并显示标记内容的地方。我是否在标记中保存和显示了错误的数据?

最佳答案

您尝试使用 final 不会给您想要的结果。

您的 InfoWindow 适配器会为每个未完成的标记调用。它是您在 GoogleMap 上配置的东西,而不是在单独的 Marker 上配置的。这意味着 getInfoContents() 会为每个未完成的 Marker 调用,导致您使用相同的 Memory< 更新每个 Marker 的数据.

解决这个问题:

第 1 步:将 markers.put(marker.getId(), memory); 移出 getInfoContents() 并直接移入 showMemory()。您的 addMarker() 调用返回可用于调用 getId()Marker

第 2 步:只为您的 GoogleMap 调用一次 setInfoWindowAdapter()

关于java - 无法显示来自 HashMap 的单个标记信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com