Проверка размера менеджера кластера Google Maps возвращает 0, затем снова сделать тот же вызов и возвращает номер

Поэтому проблема, с которой я столкнулся, заключается в том, что я пытаюсь отобразить сообщение "Результаты не найдены", если менеджер кластеров пуст. Но при первом запуске кода он возвращает 0, даже когда я могу активно видеть маркеры на карте. Я не двигаю камеру и не делаю тот же самый звонок, и он возвращает количество маркеров. Вначале я очищаю диспетчер кластеров, чтобы убедиться, что он начинается с 0, а затем выполняю цикл for для добавления маркеров. Пожалуйста помоги! mItem = getMarkers() просто получает массив всех маркеров

 mItem = getMarkers();
                    mClusterManager.getClusterMarkerCollection().clear();
                    mClusterManager.clearItems();
                    for (int i = 0; i < mItem.size(); i++) {
                        float[] results = new float[1];
                        Location.distanceBetween(location.getLatitude(), location.getLongitude(), Double.parseDouble(mItem.get(i).getmLat()), Double.parseDouble(mItem.get(i).getmLong()), results);
                        float distanceInMeters = results[0];
                        boolean isoutside10km = distanceInMeters < 20000;
                        if (isoutside10km) {
                            mClusterManager.addItem(mItem.get(i));
                        }
                    }
                    int ammount = mClusterManager.getMarkerCollection().getMarkers().size();
                    int otherAmmount = mClusterManager.getClusterMarkerCollection().getMarkers().size();
                    Log.e("SIZE3", String.valueOf(mClusterManager.getMarkerCollection().getMarkers().size()));
                    if (ammount + otherAmmount == 0) {
                        Snackbar.make(navigationView, "No results found, try adjusting your filters", Snackbar.LENGTH_LONG)
                                .setAction("Refine", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        startActivity(new Intent(MapsActivity.this, Search.class));
                                        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
                                    }
                                })
                                .show();
                    }








 class OwnIconRendered extends DefaultClusterRenderer<MyItem> {

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


    @Override
    protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {
        Bitmap bitmap = makeBitmap(MapsActivity.this, "$"+item.getmPriceHourly());
        markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));
        super.onBeforeClusterItemRendered(item, markerOptions);
    }

}
public Bitmap makeBitmap(Context context, String text)
{
    Resources resources = context.getResources();
    float scale = resources.getDisplayMetrics().density;
    Bitmap bitmap = BitmapFactory.decodeResource(resources, R.drawable.marker_bubble);
    bitmap = bitmap.copy(ARGB_8888, true);

    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE); // Text color
    paint.setTextSize(14 * scale); // Text size
    paint.setFakeBoldText(true);
    paint.setShadowLayer(1f, 0f, 1f, Color.WHITE); // Text shadow
    Rect bounds = new Rect();
    paint.getTextBounds(text, 0, text.length(), bounds);

    int x = (bitmap.getWidth() - bounds.width()) /2; // 10 for padding from right
    int y = (bitmap.getHeight())/2;
    canvas.drawText(text, x, y, paint);

    return  bitmap;
}

2 ответа

Если вы хотите, чтобы размер маркера, вы можете решить эту проблему

[ mClusterManager.getAlgorithm().getItems().size();]

Всякий раз, когда вы добавляете или удаляете элемент (ы) из ClusterManager вам нужно вызвать clusterManager.cluster(), чтобы обновить элементы.

public void cluster ()
Принудительная повторная кластеризация. Вы можете позвонить после добавления нового элемента (ов).

Другие вопросы по тегам