Fehler beim Setzen von Marker

H

husvun41

Gast
Erstelle gerade ein App mit Google Maps und wollte jetzt auch noch Marker einfügen.

Hab mich genau an diese Anleitung gehalten und er zeigt auch keine Fehler an, bis ich zum Schluss noch diese beiden Zeilen eintrage:

Code:
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
Dann kommt nämlich ein Fehler bei .add, wo er mir sagt ich soll es in .addAll ändern, dann geht aber auch nichts.

Hier mal mein Code:

Code:
import java.util.List;

import com.google.android.maps.MapActivity;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.KeyEvent;

import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class BankomatMarkers extends MapActivity 
{
    private MapView mapView;
    private MapController mc;
    private GeoPoint p;
  
    


    public BankomatMarkers(Drawable drawable2) {
        // TODO Auto-generated constructor stub
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true); //Zoom-Buttons aktivieren
        

        mc = mapView.getController();
        String coordinates[] = {"48.196379", "16.369746"}; //Start-Koordinaten
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);
     
        p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

        mc.animateTo(p);
        mc.setZoom(17); //Zoom-Faktor beim Start
        
        mapView.invalidate();


        List<Overlay> items = mapView.getOverlays();
        Drawable drawable = this.getResources()
                .getDrawable(R.drawable.bankomatsymbol);
        //Passes drawable(jd sports logo) into HelloItemizedOverlay class
        BankomatMarkers itemizedoverlay = 
                new BankomatMarkers(drawable);

        double latitude = 51.545538;
        double longitude = -0.477247;
        GeoPoint point = new GeoPoint((int)(latitude * 1e6), 
                (int)(longitude * 1e6));

        OverlayItem overlayitem = new OverlayItem(point, "JD Sports", 
                "This is a sports shop");

        itemizedoverlay.addOverlay(overlayitem);
        items.add(itemizedoverlay);



    }

    private void addOverlay(OverlayItem overlayitem) {
        // TODO Auto-generated method stub
        
    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

}

Dieser Fehler wird angezeigt:

the method add(overlay) in the type List<Overlay> is not applicable for the arguments

Hat jemand eine Idee?

Danke schonmal im voraus.

-Soopaman_FU
 
Zuletzt bearbeitet von einem Moderator:
Dein overlayitem ist von der Klasse OverlayItem abgeleitet. Deine Liste erwartet eine Instanz von Overlay. Jetzt verlassen mich auch meine Kenntnisse, da ich gerade nicht weiß, ob OverlayItem von Overlay abgeleitet wurde oder nicht.
 
Danke für die Antwort, aber was muss ich jetzt machen? Bin noch ein Android Neuling.
 
Zunächstmal würd ich die Variablenbenennungen so ändern, dass sie zu den Typen passen. Das Hauptproblem scheint mir das Verständnis zu sein, was was ist, weil du mit den Typen durcheinanderkommst.
Code:
List<Overlay> items = mapView.getOverlays();
Das sind keine Items, das sind Overlays, die womöglich Items enthalten. Wenn du nicht jedes Item auf sein eigenes Overlay packen willst (was ich nicht würde) würd ich persönlich das anders nennen. (Ein OverlayItem ist zum Beispiel ein bestimmter Marker für einen bestimmten Bankomat. Das Overlay enthält dann alle Marker für alle Bankomaten.)

Code:
BankomatMarkers itemizedoverlay = new BankomatMarkers(drawable);
Das ist kein ItemizedOverlay, das ist eine Activity, und die sollte auf die Art gar nicht erzeugt werden. Das ist auch der Grund, warum du keine OverlayItems hinzufügen kannst - einfach weil es kein ItemizedOverlay ist.

Als erstes solltest du das addOverlay wegschmeißen, dass dir Eclipse in die Klasse BankomatMarkers generiert hat.
Dann solltest du dir eine Instanz-Variable vom Typ ItemizedOverlay in deine Klasse machen, und da kannst du dann deine OverlayItem adden. Dieses ItemizedOverlay fügst du dann in die Liste mapView.getOverlays() ein.

Edit: ItemizedOverlay ist abstrakt, musst du dann natürlich auch noch eine Subklasse implementieren. Sieh mal hier http://de.wikibooks.org/wiki/Googles_Android_-_Lehrbuch_zur_Programmierung:_MapActivity#Layout ab Punkt 3.
 

Ähnliche Themen

A
Antworten
1
Aufrufe
633
swa00
swa00
S
  • Sempervivum
Antworten
2
Aufrufe
605
Sempervivum
S
S
Antworten
17
Aufrufe
550
jogimuc
J
Zurück
Oben Unten