Как я могу получить доступ ко всем маркерам на моем GoogleMap-объекте (android maps v2)и установить их видимыми?


В настоящее время я пытаюсь реализовать кнопку ActionBar, которая при использовании устанавливает все мои маркеры на моем GoogleMap-объекте видимыми или невидимыми. Моя проблема заключается в том, что я не знаю, как я могу получить ссылку на все мои маркеры, как только они будут созданы и показаны на моей карте. Я ищу решение, где я прячу все мои маркеры-объекты в массив,к которому я могу получить доступ и в других частях моего кода. разумен ли такой подход?

Вот о чем я думаю:

 private Marker[] mMarkerArray = null;
 for (int i = 0; i < MainActivity.customers.size(); i++) {

     LatLng location = new LatLng(mData.lat, mData.lng);

     Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));
     mMarkerArray.add(marker);                      
   }

И установить все мои маркеры невидимы внутри другого метода:

for (int i = 0;  i < mMarkerArray.length;; i++) {
    mMarkerArray[i].setVisible(false);
}

Он отказывается добавлять маркеры в массив маркеров []. как я могу этого достичь?

MMarkerArray.добавить (маркер) не работает

3 3

3 ответа:

Я нашел ответ, который также касается моего списка клиентов, имеющих клиентов без координат - > (0,0;0,0). вдохновлен этим блогом.

Инициализировать ArrayList:

private ArrayList<Marker> mMarkerArray = new ArrayList<Marker>();

Добавьте маркер на мою карту и на mMarkerArray:

for (int i = 0; i < MainActivity.customers.size(); i++) {
        Customer customer = MainActivity.customers.get(i);
        if (customer.getLon() != 0.0) {
            if (!customer.isProspect()) {
                Data mData= new Data(customer.getLat(),customer.getLon(),customer.getName(),
                        customer.getOrt());

                LatLng location = new LatLng(mData.lat, mData.lng);

                Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));

                mMarkerArray.add(marker); 
}}} 

Установить все маркеры невидимыми

for (Marker marker : mMarkerArray) {
    marker.setVisible(false);
    //marker.remove(); <-- works too!
}

Вы можете сохранить Collection OverlayItem внутри вашего Activity или Fragment, а затем вызовите MapView.getOverlays().clear(), чтобы сделать их "невидимыми", а затем добавьте их обратно, чтобы сделать их снова видимыми. Вызовите MapView.invalidate() после каждого действия, чтобы вызвать перерисовку карты.

Заменить

private Marker[] mMarkerArray = null;

С

private List<Marker> mMarkerArray = new ArrayList<Marker>();
И с тобой все будет в порядке.

Если вы используете расширения карт Android, Вы можете просто перебирать все маркеры, используя

for (Marker marker : googleMap.getMarkers()) {
    marker.setVisible(false);
}

Не имея своего List из всех Marker s.