2017-03-16 62 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