Как правильно управлять маркерами с помощью Google Maps API v2 на Android

Я пытаюсь реализовать приложение, в котором вы можете добавить свой собственный маркер, которому будет указано время выключения. Для этого мне нужно знать, как управлять маркерами. Допустим, у меня есть список пользователей с присвоенным уникальным идентификатором.

    private ArrayList<User> userList = new ArrayList<>();

Затем я создам список маркеров, который будет содержать такую ​​информацию, как широта, долгота, название, идентификатор владельца и крайний срок.

    private ArrayList<MyMarker> mMarkersArray = new ArrayList<MyMarker>();

Затем, когда пользователь активирует метод добавления маркера, новый маркер будет добавлен в мой список маркеров. Идеологически все выглядит красиво и просто, к тому же создание нового объекта выглядит так:

    Marker mMarker = mMap.addMarker(new MarkerOptions() (...) );

но когда дело доходит до управления конкретными маркерами, кажется, что я что-то упускаю. Будет какой-то триггерный метод, который будет проверять дедлайн всех маркеров (точнее, первого в списке «отсортированных по дедлайну»), а затем должен удалить (не скрыть, потому что я думаю, что это было бы неэффективно с точки зрения памяти) ). Как этого добиться? Я не могу добавить какую-то пользовательскую переменную, такую ​​как ID, к маркерам (чтобы я мог найти ту, которая меня интересует), и я немного потерялся.

Есть способ добиться этого, очистив всю карту, а затем снова отрендерив все маркеры, кроме неактивных, но, насколько я понимаю, это очень неэффективно, и должно быть лучшее решение.


person Kostek    schedule 05.06.2015    source источник
comment
В java нельзя добавить пользовательскую переменную к существующему объекту. Но вы можете создать собственный класс Marker, создав подкласс класса Marker, вы читаете эта страница о том, как extends провести курс. Или вы можете использовать HashMap для хранения маркеров вместо списка. Для каждой пары в HashMap вы можете установить Маркер как key, а крайний срок как value.   -  person ztan    schedule 05.06.2015
comment
Допустим, я нашел интересный маркер в своем HashMap и хотел бы удалить его, не очищая всю карту и не отображая все маркеры из HashMap (очень неэффективно). Как этого добиться?   -  person Kostek    schedule 05.06.2015


Ответы (1)


Если вы хотите удалить определенный маркер с карты, вы можете просто вызвать удалить(). метод.

Пример кода для удаления маркера из MapView и HashMap:

 for (Marker marker : hm.keySet()) {
      if (hm.get(marker).equals(deadline)) {
        marker.remove();
        hm.remove(marker);
      }
  }

Вам не нужно очищать весь MapView, если вы просто вызываете метод remove() для определенного маркера.

person ztan    schedule 05.06.2015
comment
@Kostek, мой ответ решает твою проблему? если да, можете ли вы отметить мой ответ как принятый? Спасибо. - person ztan; 09.06.2015