如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动

Posted

技术标签:

【中文标题】如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动【英文标题】:How to click a marker from multiple markers on a map and then go to a activity with info of the markers 【发布时间】:2020-07-07 19:02:53 【问题描述】:

我想在地图上创建多个标记,每个标记都会包含位置、地址等信息,当我单击标记时,会出现另一个活动并显示我单击的标记的信息,我写了一些代码,结果是,对于不同的标记,从标记传递到活动的信息是相同的,代码如下:

for (final MyMarkerData object: aaa) 
        m = googleMap.addMarker(new MarkerOptions()
                .position(object.getLatLng())
                .title(object.getTitle())
                .snippet(object.getSnippet()));
        googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
            @Override
            public boolean onMarkerClick(Marker m) 
                Intent intent = new Intent(getActivity(), EventInfo.class);
                intent.putExtra("title", object.getTitle());
                startActivity(intent);
                return false;
            
        );
      

活动中的代码是这样的:

Intent intent = getIntent();
    String a = intent.getStringExtra("title");
    TextView textview  =  findViewById(R.id.eventInfo);
    textview.setText(a);

当我点击三个不同的标记时,TextView显示相同的信息(实际上是不同的),这是ArrayList aaa中的最后一个信息,那么这是什么问题?

【问题讨论】:

【参考方案1】:

googleMap 对每个标记单击事件仅使用 1 个OnMarkerClickListener,因此您在 for 循环中多次设置它是无用的,最后一个将覆盖前一个侦听器。这就是为什么只注册最后一个监听器的原因。

这里需要重构两件事: - 拨打setOnMarkerClickListener 1 次就够了 - 定义一个HashMap<Marker, object> 以从点击的标记中获取正确的对象

HashMap<Object, Marker> markerMap = new HashMap<Object, Marker>();

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() 
    @Override
    public boolean onMarkerClick(Marker m) 
        Object obj = markerMap.get(m);

        // Use obj for correct data object
    
);

for (final MyMarkerData object: aaa) 
    marker = googleMap.addMarker(new MarkerOptions()
            .position(object.getLatLng())
            .title(object.getTitle())
            .snippet(object.getSnippet()));

    markerMap.put(aaa, marker)

【讨论】:

以上是关于如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动的主要内容,如果未能解决你的问题,请参考以下文章

在地图上显示多个标记时,单击标记时如何只打开一个信息窗口?

在Android中单击后使标记可拖动

怎么在谷歌地图上做标记呀

如何计算地图中不同标记的距离,然后选择至少一个

如何在谷歌地图android上设置多个标记?

如何禁用android地图标记单击自动中心