【问题标题】:Not able to show individual Marker Information from HashMap无法显示来自 HashMap 的单个标记信息
【发布时间】:2016-05-01 06:23:17
【问题描述】:

我已将我的对象保存到名为 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 并显示标记内容的地方。我是否保存并在标记中显示错误的数据?

【问题讨论】:

    标签: java android google-maps google-maps-markers


    【解决方案1】:

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

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

    解决这个问题:

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

    第 2 步:只为您的GoogleMap 拨打一次setInfoWindowAdapter()

    【讨论】:

    • 感谢您的快速回复!我现在就试一试:)
    • 工作就像一个魅力!也感谢你教我更多关于它的知识。非常感谢!
    猜你喜欢
    • 2014-11-10
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多