2017-03-16 41 views
4
 Marker marker = mMap.addMarker(markerOptions); 
     marker.setTag(poi.getKey()); 
     marker.hideInfoWindow(); 
     builder.include(marker.getPosition()); 

此代码正常工作,因为我把它当作manuel。我做了一切marker.tag()。我使用散列键来检索我的pin。如何在Android中使用集群算法时采用标记标记

mClusterManager.addItem()我想使用这种方法。但我也想拿标记标记。所以我不想添加到地图Marker marker = mMap.addMarker(markerOptions);

我该如何解决这个问题?

我想解释更多细节。

public class PoiItem implements ClusterItem{ 
private final LatLng mPosition; 
private String mTitle; 
private String mSnippet; 
private String tag; 
private ResponsePoi pois; 

public PoiItem(ResponsePoi poi,double lat, double lng,String tag) { 
    mPosition = new LatLng(lat, lng); 
    pois = poi; 
    mTitle = poi.getName(); 
    mSnippet = poi.getAddress(); 
    this.tag = tag; 
} 


private void setMyCluster(){ 
     mClusterManager = new ClusterManager<PoiItem>   (MainActivity.this,mMap); 
     mMap.setOnCameraIdleListener(mClusterManager); 
     mMap.setOnMarkerClickListener(mClusterManager); 
    } 

    setMyCluster(); 
    for(HashMap.Entry<String, ResponsePoi> poi : pois.entrySet()) { 
     MarkerOptions markerOptions = new MarkerOptions() 
       .snippet(poi.getValue().getAddress()) 
       .title(poi.getValue().getName()) 
       .position(new LatLng(poi.getValue().getLocation().getL().get(0),poi.getValue().getLocation().getL().get(1))) 
       .icon(BitmapDescriptorFactory.fromBitmap(smallMarker)); 
     /* 
     Marker marker = mMap.addMarker(markerOptions); 
     marker.setTag(poi.getKey()); 
     marker.hideInfoWindow(); 
     builder.include(marker.getPosition()); */ 

     mClusterManager.addItem(new PoiItem(poi.getValue(),poi.getValue().getLocation().getL().get(0),poi.getValue().getLocation().getL().get(1),poi.getKey())); 
    } 

回答

2

您可以在您的自定义MyItem类中添加标记标记字段。

例如:

MyItem item = new MyItem(lat, lng, "title", "snippet", poi.getKey()); 
mClusterManager.addItem(item); 

确保群集管理器处理点击事件集群项目:

public class MyItem implements ClusterItem { 
    private final LatLng mPosition; 
    private final String mTitle; 
    private final String mSnippet; 
    private final String mTag; // <- This is the tag 

    public MyItem(double lat, double lng, String t, String s, String tg) { 
     mPosition = new LatLng(lat, lng); 
     mTitle = t; 
     mSnippet = s; 
     mTag = tg; 
    } 

    @Override 
    public LatLng getPosition() { 
     return mPosition; 
    } 

    public String getTitle(){ 
     return mTitle; 
    } 

    public String getSnippet(){ 
     return mSnippet; 
    } 

    public String getTag(){ 
     return mTag; 
    } 
} 

然后使用addItem()方法时给标签到MyItem构造

mClusterManager.setOnClusterItemClickListener(mClusterItemClickListener); 
mMap.setOnMarkerClickListener(mClusterManager); 

然后定义你的ClusterManager.OnClusterItemClickListener,其中被点击集群项目(标记)时,你可以访问标记:

public ClusterManager.OnClusterItemClickListener<MyItem> mClusterItemClickListener = new ClusterManager.OnClusterItemClickListener<MyItem>() { 

    @Override 
    public boolean onClusterItemClick(MyItem item) { 
     if (item.getTag().equals("SomeValue")) { 
      //Do something! 
     } 
     return true; 
    } 
}; 
+0

首先,非常感谢你对你的答案。 我也觉得这个。但我的标签是散列值。所以我不知道哪一个等于其他人。 你能告诉我什么? – TeyteyLan

+0

我现在明白了。完美的答案!谢谢@DanielNugent – TeyteyLan

+0

由于onMarkerClick(Marker marker),ClusterManager.OnClusterItemClickListener不起作用。我在哪里称这种方法? – TeyteyLan