Android中使用聚类算法时如何取marker Tag
How to take marker Tag when used cluster Algorithm in Android
Marker marker = mMap.addMarker(markerOptions);
marker.setTag(poi.getKey());
marker.hideInfoWindow();
builder.include(marker.getPosition());
这段代码可以正常工作,因为我输入了 manuel。我什么都做了marker.tag()
。我使用哈希键来检索我的密码。
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()));
}
您只需将标记标签字段添加到您的自定义 MyItem
class。
例如:
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
构造函数打标签:
MyItem item = new MyItem(lat, lng, "title", "snippet", poi.getKey());
mClusterManager.addItem(item);
确保集群管理器正在处理集群项目的点击事件:
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;
}
};
Marker marker = mMap.addMarker(markerOptions);
marker.setTag(poi.getKey());
marker.hideInfoWindow();
builder.include(marker.getPosition());
这段代码可以正常工作,因为我输入了 manuel。我什么都做了marker.tag()
。我使用哈希键来检索我的密码。
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()));
}
您只需将标记标签字段添加到您的自定义 MyItem
class。
例如:
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
构造函数打标签:
MyItem item = new MyItem(lat, lng, "title", "snippet", poi.getKey());
mClusterManager.addItem(item);
确保集群管理器正在处理集群项目的点击事件:
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;
}
};