0

我正在使用 Android 地图实用程序。我正在从在线读取坐标列表并将它们绘制为集群项目,并将它们保存在哈希图中,该哈希映射将我创建的类“房间”与集群项目相关联:

private HashMap roomHashMap = new HashMap();

单击此集群项目的信息窗口时,我需要检索与集群项目关联的房间。我已经使用没有问题的标记实现了这一点,因为在 onInfoWindowClickListener 我刚刚添加了 roomHashMap.get(marker) 但现在我不能这样做,因为在信息窗口中它仍然需要一个标记,但我有一个 ClusterItem 的 HashMap

   mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker marker) {

            //Ideally I want this
           //Room currenRoom=roomHashMap.get(clusterItem);
          //but clusterItem is obviously not a Marker
        }

    });
4

1 回答 1

0
        googleMap = mFragment.getMap();
        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        googleMap.getUiSettings().setZoomControlsEnabled(true); // true to
        googleMap.getUiSettings().setZoomGesturesEnabled(true);
        googleMap.getUiSettings().setCompassEnabled(true);
        googleMap.getUiSettings().setMyLocationButtonEnabled(true);
        googleMap.getUiSettings().setRotateGesturesEnabled(true);
        if (googleMap == null) {
            Toast.makeText(getActivity(), "Sorry! unable to create maps",
                    Toast.LENGTH_SHORT).show();
        }
        mClusterManager = new ClusterManager<MyItem>(getActivity(),             googleMap );
        googleMap.setOnMapLoadedCallback(this);
        googleMap.setMyLocationEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setTiltGesturesEnabled(true);

        markers = new Hashtable<String, String>();
        mClusterManager.setRenderer(new MyClusterRenderer(getActivity() ,     googleMap , mClusterManager ));

公共类 MyClusterRenderer 扩展 DefaultClusterRenderer {

public MyClusterRenderer(Context context, GoogleMap map,
        ClusterManager<MyItem> clusterManager) {
    super(context, map, clusterManager);
}

@Override
protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {
    super.onBeforeClusterItemRendered(item, markerOptions);

    markerOptions.title(item.getTitle());
    markerOptions.snippet(item.getAddress());
}

@Override
protected void onClusterItemRendered(MyItem clusterItem, Marker marker) {
    super.onClusterItemRendered(clusterItem, marker);
    //here you have access to the marker itself
}

}

于 2015-09-22T11:11:20.260 回答