2010-11-18 4 views
0

Ich habe eine googlemap App, die zwei Elemente (itemizedoverlay Klasse) anzeigt, und ich habe eine Update-Schaltfläche. Wenn ich die Aktualisierungsschaltfläche drücke, möchte ich die Elemente aus der Karte entfernen und dieselben Elemente mit den neuen Breiten- und Längenwerten erneut einfügen (ich habe einen Dienst, der die Breiten- und Längengradfelder aktualisiert, die ich in sharedPreferences habe, und auch ich empfange die andere Position durch ein Bündel)Wie aktualisiere ich die Positionen der Elemente in einer googlemap?

was mache ich falsch? wenn ich meinen Code versuchen, nicht die Elemente der Karte nicht entfernt werden .... nur neue Objekte erscheinen ... aber ich mag die alten

updateButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mapOverlays.clear(); 
       updateMyPosition(); 
       updateFriendPosition(); 
      } 
     }); 

und das sind meine beiden Funktionen entfernen:

private void updateFriendPosition() 
    { 
     Bundle bundle = this.getIntent().getExtras();//get the intent & bundle passed by X 
     userText.setText(bundle.getString("user")); 
     permissionText.setText(bundle.getString("permission")); 
     lastUpdateText.setText(bundle.getString("lastupdate")); 
     String coordinates[] = {bundle.getString("lat"), bundle.getString("lon")}; 
     lat = Double.parseDouble(coordinates[0]); 
     lng = Double.parseDouble(coordinates[1]); 
     p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 
     OverlayItem overlayitem1 = new OverlayItem(p, bundle.getString("user"), "Hi Friend!"); 
     itemizedoverlay.addOverlay(overlayitem1); 
     mapOverlays.add(itemizedoverlay);// dibujo la estrella con la posicion actual del friend 

     mc.animateTo(p); ///nos centra el mapa en la posicion donde esta nuestro amigo 
     mc.setZoom(10); /// ajusta el zoom a 10   
    } 

private void updateMyPosition() 
    { 
     String coordinates[] = {settings.getString("mylatitude", null),settings.getString("mylongitude", null)};  
     lat = Double.parseDouble(coordinates[0]); 
     lng = Double.parseDouble(coordinates[1]); 
     p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 
     OverlayItem overlayitem1 = new OverlayItem(p, "Me", "My Position"); 
     itemizedoverlay2.addOverlay(overlayitem1); 
     mapOverlays.add(itemizedoverlay2);//dibujo mi icono para mostrarme a mi 
    } 

i auch mit invalidate() auf der mapview tryed aber es funktioniert nicht ... noch die alten Gegenstände malen ...

Antwort

1

es ist wie auf der SDK-Tutorial basiert aussieht. Sie haben dem itemizedoverlay und dem anderen zwei Dinge hinzugefügt. Sie benötigen

ein Verfahren in HelloItemizedOverlay, nämlich 'klar' diese Methode
public void clear() { 
    mOverlays.clear(); 
} 

Anruf hinzufügen, bevor Sie

rufen
itemizedoverlay.addOverlay(overlayitem1); 
+0

Dank! hehe gelöst vielleicht kannst du mir auch bei dieser Frage helfen? http://stackoverflow.com/questions/4216231/how-to-actualice-the-positions-of-the-items-in-a-googlemap – NullPointerException

+0

Froh, dass es funktioniert hat. Dein Link zu deiner anderen Frage verweist jedoch auf diesen! – NickT

+0

oh sorry, überprüfen Sie dies: http://stackoverflow.com/questions/4217090/why-this-thread-doesnt-work – NullPointerException