如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动
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)
【讨论】:
以上是关于如何从地图上的多个标记中单击一个标记,然后使用标记的信息转到一个活动的主要内容,如果未能解决你的问题,请参考以下文章