2010-03-19 4 views
1

Je semble avoir un problème avec l'utilisation de ItemizedOverlay et OveralyItems.Plusieurs éléments de superposition dans android

Je peux obtenir le premier overlayItem à apparaître sur la carte, mais aucun élément après cela.

Exemple de code

est: http://www.anddev.org/multiple_overlay_items-t12171.html

Aperçu rapide ici:

public class Markers extends ItemizedOverlay { 

private Context ctx; 

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

public Markers(Drawable defaultMarker, Context cont) { 

     super(boundCenterBottom(defaultMarker)); 
     this.ctx = cont; 
     // TODO Auto-generated constructor stub 
} 

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

@Override 
public boolean onTap(GeoPoint p, MapView mapView) { 
     // TODO Auto-generated method stub 
     return super.onTap(p, mapView); 
} 


@Override 
protected boolean onTap(int index) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show(); 
     return super.onTap(index);   
} 

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

public void addOverlay(OverlayItem item) { 
     mOverlays.add(item); 
     setLastFocusedIndex(-1); 
     populate(); 

} 

public void clear() { 
     mOverlays.clear(); 
     setLastFocusedIndex(-1); 
     populate(); 
} 
} 

Des échantillons de la façon dont il est utilisé:

Markers usersMarker = new Markers(user,overview.this); 
GeoPoint p = new GeoPoint((int) (lat * 1E6),(int) (lon * 1E6)); 
OverlayItem item = new OverlayItem(p,userData[0],userData[3]); 
item.setMarker(this.user); 
usersMarker.addOverlay(item); 

le premier marqueur apparaît sur la carte, mais si je ajouter plus ils ne se présentent pas? Y a-t-il un problème avec la méthode populate()? J'ai essayé de l'appeler manuellement après avoir ajouté tous les marqueurs, mais cela n'a toujours pas aidé. S'il vous plaît, si vous avez une idée de ce qui pourrait être faux, dites-le.

+0

appelez-vous invalidate() ou postInvalidate() dans votre activité avec mapview? – Sephy

+0

Oui, après l'ajout de ItemizedOverlay pour mapper les superpositions que j'appelle invalider ... cela n'aide pas – Bostjan

Répondre

1

J'ai enfin trouvé une réponse. J'ai honte de l'admettre mais le problème n'était pas dans les articles ne dessinant pas mais dans moi ne les voyant pas à l'écran .... Les emplacements pour les 2 articles étaient censés être presque identiques ... mais l'un d'entre eux était calculé avec un bug et a été déplacé à l'autre bout du monde. Donc je n'ai jamais pris la peine de regarder ou de dézoomer ... quand je l'ai fait, j'ai trouvé mon autre marqueur assis quelque part dans la mer des Barren :) Merci à tous ceux qui ont essayé de m'aider ... oh et le code ci-dessus fonctionne:

5

vérifier cet échantillon project cela aide. ajouter plusieurs addOverlay() s sur plusieurs fois

1

J'ai un code de travail qui ressemble presque exactement au vôtre, sauf que je n'appelle pas setLastFocusedIndex dans ma fonction addOverlay. Essayez de le commenter et voyez si cela fonctionne.

Questions connexes