2017-10-31 16 views
0

私のアプリケーションマップでいくつかのポイントをクラスタリングしようとしましたが、最初に機能し、データがクラスタリングされましたが、新しいデータでリストを再度更新しようとすると、 clearItems()clear()マップを使用しますが、変更は起こりません。
地図でCLUSTERマネージャーが更新されていない

コードマップに

((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() { 
    @Override 
    public void onMapReady(final GoogleMap googleMap) { 
     mMap = googleMap; 
     LatLngBounds ADELAIDE = new LatLngBounds(
       new LatLng(16.57946, 35.69014), new LatLng(31.67252, 50.20833)); 
     mMap.setLatLngBoundsForCameraTarget(ADELAIDE); 
     final LatLng location = new LatLng(mDefaultLat, mDefaultLng); 
     mClusterManager = new ClusterManager<>(getContext(), mMap); 
     mClusterManager.setRenderer(new ClusterRenderer(getContext(), mMap, mClusterManager)); 
     final CameraPosition[] mPreviousCameraPosition = {null}; 
     mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
      @Override 
      public void onCameraIdle() { 
       CameraPosition position = googleMap.getCameraPosition(); 
       mDefaultLat = position.target.latitude; 
       mDefaultLng = position.target.longitude; 
       locationFromMap = true; 
       populate(); 
       if (mPreviousCameraPosition[0] == null || mPreviousCameraPosition[0].zoom != position.zoom) { 
        mPreviousCameraPosition[0] = googleMap.getCameraPosition(); 
        addItems(); 
       } 
      } 
     }); 
     mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { 
      @Override 
      public void onMapLoaded() { 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 16)); 

      } 
     }); 

     mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
      @Override 
      public boolean onMarkerClick(Marker marker) { 
       try { 
        new OfficeDialog(mActivity, officeList.get(Integer.parseInt(marker.getSnippet()))).show(); 
       } catch (Exception e) { 

       } 
       return true; 
      } 
     }); 

    } 
}); 

addItemsが

private void addItems() { 
    if (!listAdded && officeList.size() > 0) { 
     mClusterManager.clearItems(); 
     mClusterManager.cluster(); 
     mClusterManager.addItems(officeList); 
     listAdded = true; 
    } 
    mClusterManager.cluster(); 
} 

と私クラスタマネージャ機能カスタムI「のdidnのデバッグ後

public class ClusterRenderer extends DefaultClusterRenderer<Office> { 
    Context context; 
    private IconGenerator iconGenerator; 
    private float density; 



    public ClusterRenderer(Context context, GoogleMap map, ClusterManager<Office> clusterManager) { 
     super(context, map, clusterManager); 
     clusterManager.setRenderer(this); 
     this.context = context; 
     density = context.getResources().getDisplayMetrics().density; 
    } 

    @Override 
    protected void onBeforeClusterItemRendered(Office item, MarkerOptions markerOptions) { 
     markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.ejar_location_icon_copy)); 
    } 

    @Override 
    protected void onBeforeClusterRendered(Cluster<Office> cluster, MarkerOptions markerOptions) { 
     if(iconGenerator == null) { 
      iconGenerator = new IconGenerator(context); 
      iconGenerator.setContentView(makeTextView(context)); 
     } 
     iconGenerator.setBackground(makeBackground(false, cluster.getSize())); 

     markerOptions.icon(BitmapDescriptorFactory.fromBitmap(iconGenerator.makeIcon(String.valueOf(cluster.getSize())))); 
    } 

    @Override 
    protected void onClusterRendered(Cluster<Office> cluster, Marker marker) { 
     super.onClusterRendered(cluster, marker); 
    } 

    @Override 
    protected boolean shouldRenderAsCluster(Cluster<Office> cluster) { 
     return cluster.getSize() > 1; 
    } 

    private ShapeDrawable makeBackground(boolean isClicked, int size) { 
     ShapeDrawable background = new ShapeDrawable(new OvalShape()); 
     int color = ContextCompat.getColor(context, R.color.colorPrimary); 
     if (size < 50) { 
      color = ContextCompat.getColor(context, R.color.colorPrimary); 
     } else if (size < 100) { 
      color = ContextCompat.getColor(context, R.color.cluster_50); 
     } else if (size < 200) { 
      color = ContextCompat.getColor(context, R.color.cluster_100); 
     } else if (size < 1000) { 
      color = ContextCompat.getColor(context, R.color.cluster_200); 
     } else color = ContextCompat.getColor(context, R.color.cluster_1000); 

     background.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); 
     return background; 
    } 

    private SquareTextView makeTextView(Context context) { 
     SquareTextView squareTextView = new SquareTextView(context); 

     ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(-2, -2); 
     squareTextView.setLayoutParams(layoutParams); 
     squareTextView.setTextColor(ContextCompat.getColor(context, R.color.white)); 
     squareTextView.setId(com.google.maps.android.R.id.text); 
     int twelveDpi = (int) (12.0F * density); 
     squareTextView.setPadding(twelveDpi, twelveDpi, twelveDpi, twelveDpi); 
     return squareTextView; 
    } 

    public IconGenerator getIconGenerator(boolean isClicked) { 
     iconGenerator.setBackground(makeBackground(isClicked, 0)); 
     return iconGenerator; 
    } 
} 

答えて

0

をレンダリングし、この問題について検索見つけた私はそれについての問題を発見したので、私のWebサービスをチェックしたので、それについてyの理由。
Webサービスはオブジェクトの静的な場所を返します。したがって、アプリケーションを修正した後にクラスタが変更されないようにしてください。アプリケーションは問題なく正しく動作します。

関連する問題