java - Android中使用聚类算法时如何取marker Tag

标签 java android google-maps dictionary marker

        Marker marker = mMap.addMarker(markerOptions);
        marker.setTag(poi.getKey());
        marker.hideInfoWindow();
        builder.include(marker.getPosition()); 

这段代码可以正常工作,因为我输入了 manuel。我做了一切 marker.tag()。我使用哈希键来检索我的密码。

mClusterManager.addItem() 我想使用这个方法。但我也想拿标记标签。所以我不想将 map 添加为 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()));
    }

最佳答案

您只需将 Marker 标记字段添加到您的自定义 MyItem 类即可。

例如:

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,当集群项(Marker)被点击时,你可以在其中访问标签:

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

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

关于java - Android中使用聚类算法时如何取marker Tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42842228/

相关文章:

javascript - 如何从事件处理程序调用公共(public)方法

iphone - 在 iPhone 应用程序中生成 KML 文件

java - 新 Activity 出现意外错误?

java - Android AsyncTask 保持返回相反的值

android - 在 IceCreamSandwich 上运行我的 Phonegap 应用程序时 deviceready 不触发

java - Android Firebase - 写入数据时持续超时

android - 如何检索 CountryCode/ISO?

java - 关闭服务 - 结合 HandlerInterceptor 和 ServletContextListener

java - 数组和重复输出的问题

ios - 如何在 iOS 6 中使用特定地址启动 iOS map 应用程序?