如何为同一CustomInfoWindow的不同Marker设置不同点击事件
给不同Marker的自定义信息窗口设置不同点击事件
嘿,我来帮你搞定这个问题!你现在的问题是所有Marker的信息窗口点击都触发同一个跳转印度的事件,对吧?其实很简单,我们只需要给每个Marker做个专属标记,然后在点击事件里判断是哪个Marker,再执行对应的操作就可以啦。下面是具体的实现步骤,非常适合新手:
步骤1:给每个Marker添加专属标识
在你添加Marker的时候,给每个Marker设置一个唯一的标签(tag),或者利用Marker的title来区分。这里推荐用tag,因为title可能会显示在地图上,而tag是隐藏的标识,更灵活。
比如在onMapReady方法里添加Marker时:
@Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setOnInfoWindowClickListener(this); // 添加悉尼的Marker,并设置tag为"sydney" Marker sydneyMarker = mMap.addMarker(new MarkerOptions() .position(new LatLng(-34, 151)) // 悉尼的经纬度 .title("悉尼")); // 可选,显示在Marker上的标题 sydneyMarker.setTag("sydney"); // 给这个Marker打个标签 // 添加印度的Marker,并设置tag为"india" Marker indiaMarker = mMap.addMarker(new MarkerOptions() .position(new LatLng(20.5937, 78.9629)) // 印度的经纬度 .title("印度")); indiaMarker.setTag("india"); // 剩下的18个Marker也按照这个方式添加,每个都设置唯一的tag,比如"london"、"newyork"等等 }
步骤2:修改点击事件,根据标识执行不同操作
接下来修改onInfoWindowClick方法,通过Marker的tag判断是哪个地点,然后执行对应的操作:
@Override public void onInfoWindowClick(Marker marker) { // 获取Marker的tag String markerTag = (String) marker.getTag(); // 判断tag,执行不同操作 if (markerTag != null) { switch (markerTag) { case "sydney": // 悉尼的操作:显示Toast提示 Toast.makeText(MapsActivity.this, "你点击了悉尼的信息窗口!", Toast.LENGTH_SHORT).show(); break; case "india": // 印度的操作:跳转到India页面 openIndia(); break; // 可以继续添加其他Marker的case,比如: // case "london": // // 伦敦的操作,比如打开LondonActivity // Intent intent = new Intent(this, London.class); // startActivity(intent); // break; default: // 如果遇到未设置tag的Marker,显示默认提示 Toast.makeText(MapsActivity.this, "该地点暂无对应操作", Toast.LENGTH_SHORT).show(); break; } } } // 你原来的openIndia方法保持不变 public void openIndia(){ Intent intent = new Intent(this,India.class); startActivity(intent); }
新手友好的替代方案:用Marker的title判断
如果你觉得设置tag麻烦,也可以直接用Marker的title来判断(前提是每个Marker的title都是唯一的):
@Override public void onInfoWindowClick(Marker marker) { String title = marker.getTitle(); if ("悉尼".equals(title)) { Toast.makeText(this, "悉尼被点击啦!", Toast.LENGTH_SHORT).show(); } else if ("印度".equals(title)) { openIndia(); } // 其他地点的判断继续加else if就行 }
小提示
- 如果你有20个Marker,建议把每个Marker的经纬度、tag、对应操作整理成一个列表或者对象,这样代码会更整洁,不过对于新手来说,先逐个添加也完全没问题。
- 确保每个Marker的tag是唯一的,不然会出现多个Marker触发同一个事件的情况哦。
内容的提问来源于stack exchange,提问作者Atmospheric Productions
相关产品推荐
相关产品推荐

