2013-05-05 15 views
10

ich einen solchen Code haben:Android Google Maps hinzufügen eigenen Tag Marker

protected void onPostExecute(final ArrayList<HashMap<String, String>> adapter) { 

       for (final HashMap<String, String> a : adapter) { 
        LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
        Log.e("pppppos", String.valueOf(pos.latitude)); 
        Marker m = map.addMarker(new MarkerOptions().position(pos) 
          .title(a.get(TAG_NAME)) 
          .snippet("Kiel is cool")); 

        map.setOnInfoWindowClickListener(
           new OnInfoWindowClickListener(){ 
            public void onInfoWindowClick(Marker marker){ 
             Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
             nextScreen.putExtra("exchanger_id", id);  
             startActivityForResult(nextScreen, 0); 
            } 
            }); 
       } 

Aber ich brauche zum Beispiel Benutzerfeld unsichtbar gesetzt Tag_id für jeden Marker, und verwenden Sie diese ID dann, wenn auf andere zusätzliche Informationen zu senden Aktivität, etwas wie:

protected void onPostExecute(final ArrayList<HashMap<String, String>> adapter) { 

      for (final HashMap<String, String> a : adapter) { 
       LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
       Marker m = map.addMarker(new MarkerOptions().position(pos) 
         .title(a.get(TAG_NAME)) 
         .snippet("Kiel is cool") 
                .Tag_id(TAG_ID)); 

       map.setOnInfoWindowClickListener(
          new OnInfoWindowClickListener(){ 
           public void onInfoWindowClick(Marker marker){ 
            Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
            nextScreen.putExtra("exchanger_id", marker.get(TAG_ID));  
            startActivityForResult(nextScreen, 0); 
           } 
           }); 
      } 

Ist es wirklich zu tun? Wie kann ich in meinem Zuhörer bekommen, auf welchen Marker ich klicke?

Auch könnte es über Titelfeld getan werden ... Aber ich bin immer der Fehler, wenn marker.getTitle() schreiben ...

upd

for (final HashMap<String, String> a : adapter) { 
       LatLng pos = new LatLng(Double.valueOf(a.get(TAG_latitude)), Double.valueOf(a.get(TAG_longitude))); 
       Log.e("pppppos", String.valueOf(pos.latitude)); 
       HashMap<Marker, String> m = new HashMap<Marker, String>(); 
         m.put(map.addMarker(new MarkerOptions().position(pos) 
         .title(a.get(TAG_NAME)) 
         .snippet("Kiel is cool")), "1");      

      } 

      map.setOnInfoWindowClickListener(
       new OnInfoWindowClickListener(){ 
        public void onInfoWindowClick(HashMap<Marker, String> marker){ 
         Intent nextScreen = new Intent(SearchExchangerActivity.this, BankExchangersListActivity.class); 
         nextScreen.putExtra("exchanger_id", "1"); 
         startActivityForResult(nextScreen, 0); 
        } 
        }); 

Antwort

11
  1. können Sie Map<Marker, String> verwenden und halten Sie Ihre Daten dort oder
  2. Verwendung Android Maps Extensions, die getData und setData Funktionen zu Marker Klasse hinzufügt.

Btw. Sie sollten InfoWindowAdapter nicht in einer Schleife festlegen. Das macht keinen Sinn. Nur der letzte überlebt.

+1

Sie Anwendungsbeispiel Map geben könnte? –

+0

wenn ich versuche Map m = m.put (map.addMarker (neuer Marker(). Position (Pos) \t \t \t \t .title (a.get (TAG_NAME)) \t \t \t zu schreiben \t \t \t \t .snippet ("Kiel ist cool")), "1"); \t etwas schlecht ist –

+1

@ValdisAzamaris hier finden Sie für Abhilfen mit 'Map': http://code.google.com/p/gmaps-api-issues/issues/detail?id=4650 –

2

Das ist derzeit offiziell verfügbar, die setTag und getTag wurden der Marker-API hinzugefügt.

Das Folgende wurde aus dem "associate data with a marker" Abschnitt von der offiziellen doc genommen:

/** 
* A demo class that stores and retrieves data objects with each marker. 
*/ 
public class MarkerDemoActivity extends FragmentActivity implements 
     OnMarkerClickListener, 
     OnMapReadyCallback { 

    private static final LatLng PERTH = new LatLng(-31.952854, 115.857342); 
    private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); 
    private static final LatLng BRISBANE = new LatLng(-27.47093, 153.0235); 

    private Marker mPerth; 
    private Marker mSydney; 
    private Marker mBrisbane; 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.marker_demo); 

     SupportMapFragment mapFragment = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    /** Called when the map is ready. */ 
    @Override 
    public void onMapReady(GoogleMap map) { 
     mMap = map; 

     // Add some markers to the map, and add a data object to each marker. 
     mPerth = mMap.addMarker(new MarkerOptions() 
       .position(PERTH) 
       .title("Perth"); 
     mPerth.setTag(0); 

     mSydney = mMap.addMarker(new MarkerOptions() 
       .position(SYDNEY) 
       .title("Sydney"); 
     mSydney.setTag(0); 

     mBrisbane = mMap.addMarker(new MarkerOptions() 
       .position(BRISBANE) 
       .title("Brisbane"); 
     mBrisbane.setTag(0); 

     // Set a listener for marker click. 
     mMap.setOnMarkerClickListener(this); 
    } 

    /** Called when the user clicks a marker. */ 
    @Override 
    public boolean onMarkerClick(final Marker marker) { 

     // Retrieve the data from the marker. 
     Integer clickCount = (Integer) marker.getTag(); 

     // Check if a click count was set, then display the click count. 
     if (clickCount != null) { 
      clickCount = clickCount + 1; 
      marker.setTag(clickCount); 
      Toast.makeText(this, 
          marker.getTitle() + 
          " has been clicked " + clickCount + " times.", 
          Toast.LENGTH_SHORT).show(); 
     } 

     // Return false to indicate that we have not consumed the event and that we wish 
     // for the default behavior to occur (which is for the camera to move such that the 
     // marker is centered and for the marker's info window to open, if it has one). 
     return false; 
    } 
} 
+0

Beachten Sie, dass Tag Getter und Setter nur mit Google Play Services 9.4.0 verfügbar sind – Skoua