(Google Maps Android Marker Clustering Utility)Fragment 暂停时不会删除集群项目

Posted

技术标签:

【中文标题】(Google Maps Android Marker Clustering Utility)Fragment 暂停时不会删除集群项目【英文标题】:(Google Maps Android Marker Clustering Utility) Cluster items not being removed when Fragment is paused 【发布时间】:2015-04-30 15:56:20 【问题描述】:

我正在尝试实施 Google Maps android Marker Clustering Utility。我遇到的问题是在最大缩放时重叠 ClusterItems。我对此的解决方案是:通过扩展 DefaultClusterRenderer 创建自定义渲染器。然后防止在最大缩放时进行聚类,然后在最大缩放时允许 ClusterItems 可拖动(否则不允许拖动)。

       @Override
       protected void onBeforeClusterItemRendered(MarkerList.Markers markers, MarkerOptions markerOptions) 

            mImageView.setImageBitmap(getImage(markers));
            Bitmap icon = mIconGenerator.makeIcon();
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(markers.getEntity().getPostType());

            //allow user to drag overlapping ClusterItems to inspect individually
            if(MAX_CAMERA_ZOOM <= cameraZoom)
                markerOptions.draggable(true);
            else
                markerOptions.draggable(false);
            
        

        @Override
        protected boolean shouldRenderAsCluster(Cluster cluster) 

            //Never render clusters at max zoom
            if (MAX_CAMERA_ZOOM <= cameraZoom ) 
                return false;
             else 
                return cluster.getSize() > 2;
            
        

这将在我的手机上运行一段时间,然后集群停止并且拖动的 ClusterItems 变为永久,以便显示的 ClusterItems 的数量增加(同一项目的许多副本在地图上)。新拖动的 ClusterItems 是不可点击的,所以我认为它们只是没有被删除的图标。谁能帮我找到解决方案?我猜我需要在拖动后以编程方式删除拖动的图标。尽管对解决我的问题的任何建议将不胜感激。

【问题讨论】:

据我了解,您试图通过在最大缩放时拖动 ClusterItems 来删除它们。也许您可以使用拖动事件侦听器并从地图中删除 ClusterItem,然后将 ClusterItem 本身设置为 null。或者,***.com/questions/15276908 中的答案显示您可以设置去簇的最大缩放级别。 问题在于 ClusterItems 彼此重叠,因此通过使它们可拖动,用户可以移动并检查隐藏的那些。这不是最好的解决方案,但它很简单,或者我认为它会是。是java脚本还是android的链接。我认为 js 实用程序比 Android 实用程序更进一步。 重叠,你的意思是他们正在组合形成一个更大的ClusterItem,或者实际上有一个ClusterItem在另一个之上?我认为该链接适用于 JS,对不起。你试过事件监听器吗? 【参考方案1】:

看来问题是由 MapFragment 暂停和渲染器未删除地图上的额外 ClusterItems 引起的。所以在 onPause 中调用 map.clear 似乎解决了额外 ClusterItems 的问题。

@Override
public void onPause() 

    //Clear lost ClusterItems
    if (mMap != null) 
        mMap.clear();
    

    if (mGoogleApiClient.isConnected()) 
        mGoogleApiClient.disconnect();
    

    super.onPause();
    mMapView.onPause();

这可行,但我不确定为什么这些项目会丢失,我猜这个问题与暂停 MapFragment 而不是拖动 ClusterItem 有关,所以我将更改标题以反映这一点。

【讨论】:

以上是关于(Google Maps Android Marker Clustering Utility)Fragment 暂停时不会删除集群项目的主要内容,如果未能解决你的问题,请参考以下文章

com.google.android.gms.maps.MapFragment:无法解析符号“地图”

import com.google.android.maps.geopoint 无法解析

com.google.android.maps 在 Android Studio 中不存在

膨胀类 com.google.android.maps.MapView 时出错

Google Maps Android API V2 检查 Google Maps 应用程序是不是被禁用

错误:com.google.maps.android.kml 包不存在