Search code examples
androidmarker

adding in markers from a arrayllist


I am trying to add markers for each driver in the driver model which is loaded into an array list. When I toast the result I get all the drivers but the marker shows only one driver.

Please help me get the markers for each driver in the module.

//Add markers for all drivers retrieved
private void addMarkers(List<Driver> drivers) {
  if (map != null && !drivers.isEmpty()) {
    for (int i = 0; i < drivers.size(); i++) {
      //Get driver model
      Driver driver = drivers.get(i);

      Toast.makeText(this, driver.toString(), Toast.LENGTH_LONG).show();

      //Add marker
      GeoPoint driverLocation = driver.getGeoPoint();

      if (driverMarker == null) {
        driverMarker = map.addMarker(new MarkerOptions()
        .title(driver.getCarNumber())
        .position(new LatLng(driverLocation.getLatitude(), driverLocation.getLongitude()))
        );
        driverMarker.showInfoWindow();
      }
      else{
        driverMarker.remove();
        driverMarker = map.addMarker(new MarkerOptions()
        .title(driver.getCarNumber())
        .position(new LatLng(driverLocation.getLatitude(), driverLocation.getLongitude()))
        );
        driverMarker.showInfoWindow();
      }
    }
  }
}

Solution

  • You're only get one marker because you're adding and removing the same Marker again and again in your code:

    for (int i = 0; i < drivers.size(); i++) {
    
        if (driverMarker == null) {
           driverMarker = map.addMarker(...);
        } else {
           driverMarker.remove();
           ...
        }
    }
    

    So, you need to slightly change your code to adding each marker and save it to a list. Something like this:

    private void addMarkers(List<Driver> drivers) {
      List<Marker> markers = new ArrayList<>();
    
      if (map != null && !drivers.isEmpty()) {
        for (int i = 0; i < drivers.size(); i++) {
          //Get driver model
          Driver driver = drivers.get(i);
    
          //Add marker
          GeoPoint driverLocation = driver.getGeoPoint();
    
          Marker driverMarker = map.addMarker(new MarkerOptions()
            .title(driver.getCarNumber())
            .position(new LatLng(driverLocation.getLatitude(), driverLocation.getLongitude())));
    
          driverMarker.showInfoWindow();
    
          // add to the list
          markers.add(driverMarker);
         }
       }
    
       return markers;
    }
    

    then you can use the method to get the list of marker:

    // assumet drivers is list of Driver
    List<Marker> markers = addMarkers(drivers);