t0s
t0s

Reputation: 1221

Displaying only the last Overlay item

What i do is to take data from an xml file and then using a Custom ItemizedOverlay i add the items.

public CustomItemizedOverlay callme(List<Places> result){

    Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);

    latitudeE6  = result.get(i).latitude;
    longitudeE6 = result.get(i).longitude;

    GeoPoint point = new GeoPoint(latitudeE6a, longitudeE6a);                               
    OverlayItem overlayitem = new OverlayItem(point, result.get(i).title, result.get(i).text);

    CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable);

    itemizedOverlay.addOverlay(overlayitem);//add point

    i++;

    latitudeE6 =0;
    longitudeE6 =0;
    return itemizedOverlay;

}

While i am on the UI Thread i use a while() loop to print :

int j=0;
List<Overlay> mapOverlays = mapView.getOverlays();

while( j < 5 ) {
    test1 = callme(result1);                                
    mapOverlays.add(test1);                                 

    j++;
} 

MapController mapController = mapView.getController();
mapController.setZoom(12);

Having to display only five items the loop stops while j < 5 . The problem is that it only displays the last item from the xml data.

Upvotes: 0

Views: 334

Answers (2)

Vishesh Chandra
Vishesh Chandra

Reputation: 7071

Step1: Add this java file..

public class MapItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
public static boolean isRouteSelecting;
public static ArrayList<GeoPoint> geoPoints;

private GeoPoint geoPoint_;
private ArrayList<OverlayItem> overlayItems_ = new ArrayList<OverlayItem>();

public MapItemizedOverlay(Drawable defaultMarker)
{
    super(boundCenterBottom(defaultMarker));
    // TODO Auto-generated constructor stub
}

public void addOverlay(OverlayItem overlayItem)
{
    overlayItems_.add(overlayItem);
    populate();
}

@Override
protected OverlayItem createItem(int i)
{
    // TODO Auto-generated method stub
    return overlayItems_.get(i);
}

@Override
public int size()
{
    // TODO Auto-generated method stub
    return overlayItems_.size();
}
 }

Step2: Into your MapActivity...(oncreate)

mapItemizedOverlay_ = new MapItemizedOverlay(drawable_);

                     for(int i = 0; i < yourList.size(); i++)
            {

                GeoPoint geoPoint = new            GeoPoint(Latitude, Longitude);
                OverlayItem overlayItem = new OverlayItem(geoPoint, busStop.getStopName(), "");
                mapItemizedOverlay_.addOverlay(overlayItem);
            }
            drawable_ = this.getResources().getDrawable(R.drawable.ic_launcher);
            mapView_.getOverlays().add(mapItemizedOverlay_);

Upvotes: 2

user370305
user370305

Reputation: 109247

You missed a loop for int i in your callme(List<Places> result) method

Update:

List<Overlay> mapOverlays = mapView.getOverlays();

  for(int i=0;i<result1.size();i++)
   {
    Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
    latitudeE6  = result1.get(i).latitude;
    longitudeE6 = result1.get(i).longitude;

    GeoPoint point = new GeoPoint(latitudeE6a,longitudeE6a);                                
    OverlayItem overlayitem = new OverlayItem(point, result1.get(i).title, result1.get(i).text);
    CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(drawable);           
    itemizedOverlay.addOverlay(overlayitem);        //add point

     mapOverlays.add(itemizedOverlay);  
    }           
    latitudeE6 =0;
    longitudeE6 =0;                     
MapController mapController = mapView.getController();
mapController.setZoom(12);

Use the above code remove your code what have you post with question and let mek now what happen..

Upvotes: 1

Related Questions