android 个地图中的多个标记点击事件

Multiple marker Click event in android maps

我的 google 地图 activity 中有一些标记代表一些商店位置。我需要为每个标记编写点击事件,以便我可以为每个商店打开相应的站点。我正在使用以下代码添加标记。

  public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    for(int i = 0 ; i < shop.size() ; i++ ) {

        createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
    }

  mMap.setOnMarkerClickListener(ShoppingPage.this);


}
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) {
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f));

    myMarker = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .anchor(0.5f, 0.5f)
            .title(title)
            .snippet(snippet)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp)));
    return myMarker;

}

当我尝试将点击监听器添加到标记时,我无法将点击监听器添加到所有 them.I 只能将点击事件添加到最后添加的标记。但我需要为地图中的每个标记制作点击事件。请帮我。这是我的点击事件代码。

 public boolean onMarkerClick(final Marker marker) {
    if (marker.equals(myMarker))
    {
        //handle click here
      Log.d("title",""+ marker.getTitle());
        Log.d("position",""+ marker.getPosition());
    }
    return  true;
}

在 onMarkerClick(...) 中, "if (marker.equals(myMarker))" 意味着 onMarkerClick 只对 myMarker 做任何事情。
myMarker 引用最后创建的标记,因为每当调用 createMarker 时它都会被覆盖。 所以建议是去掉"if (marker.equals(myMarker))"

使用这个:

首先让你的应用实现GoogleMap.OnMarkerClickListener然后创建一个标记数组:

Marker[] marker = new Marker[20]; //change length of array according to you

然后里面

onMapReady(){
    mMap.setOnMarkerClickListener(this);
for(int i = 0 ; i < shop.size() ; i++ ) {
        marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
    }

然后终于

@Override
    public boolean onMarkerClick(Marker marker) {
   //you can get assests of the clicked marker
   return false;
}

希望对您有所帮助!!!

这是错误的:

public boolean onMarkerClick(final Marker marker) {
    if (marker.equals(myMarker))
    {
        //handle click here
      Log.d("title",""+ marker.getTitle());
        Log.d("position",""+ marker.getPosition());
    }
    return  true;
}

应该是:

public boolean onMarkerClick(final Marker marker) {
    
    return  true;
}

marker 变量表示单击了哪个标记。顺便说一句,你的问题毫无意义,你可以先设置断点,如果看到你错了,所有标记都有响应。

此外,我更喜欢这样的东西:

googleMap.setOnMarkerClickListener(marker ->
{
   /*Do what you need with clicked marker*/
   return true;
});

给每个标记一个 OnClickListener

.setOnClickListener(getOnClickAction());

比起处理点击的 OnClickListener。

View.OnClickListener getOnClickAction(){
        return new View.OnClickListener(){
          public void onClick(View v){
              //Handle Click
              v.getTitle(position);
          }
        };
    }

基本上 setOnMarkerClickListner 检测您点击了哪个标记。

如果您没有为标记设置任何标题,我有一种方法可以识别单击了哪个标记。

首先,创建一个标记 Map,以标记 object 作为键,标记名称作为值。

private Map<Marker, String> markerMap = new HashMap<>();

然后,将所需的标记添加到 地图 object。

marker = gMap.addMarker(new MarkerOptions()
          .position(new LatLng(latitude, longitude))
          .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
markerMap.put(marker,gymDataHolder.getTitle());

之后,使用setOnMarkerClickListner

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        Toast.makeText(context, markerMap.get(marker), Toast.LENGTH_SHORT).show();
        return true;
    }
});

在地图上添加标记时您可以像这样为每个标记设置标签作为商店

 marker= mGoogleMap!!.addMarker(MarkerOptions().position(latLng)
                     .title(user.name)
                     .icon({Your shop icon})
        marker.tag=shop

然后你可以在标记上实现点击监听器

override fun onMarkerClick(p0: Marker?): Boolean {
    if(p0?.tag==null) return false
    var shop=(p0?.tag) as Shop
      Toast.makeText(context,shop?.name,Toast.LENGTH_SHORT).show()
    return true
}