2013-05-05 11 views
10

Ho tale codice:google maps android aggiungono al marcatore proprio tag

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); 
            } 
            }); 
       } 

ma ho bisogno di impostare invisibile a campo utente, ad esempio Tag_id per ogni indicatore, e utilizzare questo ID poi, quando l'invio di informazioni in più per altri attività, qualcosa di simile a:

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); 
           } 
           }); 
      } 

è reale di fare? Come posso vedere nel mio listener quale marker sto facendo clic?

Inoltre potrebbe essere fatto tramite campo del titolo ... Ma sto ottenendo l'errore di quando si scrive marker.getTitle() ...

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); 
        } 
        }); 

risposta

11
  1. È possibile utilizzare Map<Marker, String> e mantenere il vostro i dati lì o
  2. utilizzare Android Maps Extensions che aggiunge getData e le funzioni setData alla classe Marker.

Btw. Non dovresti impostare InfoWindowAdapter in un ciclo. Non ha senso. Solo l'ultimo sopravvive.

+1

si potrebbe dare esempio di utilizzo Mappa ? –

+0

quando provo a scrivere Mappa m = m.put (map.addMarker (nuovi MarkerOptions(). Posizione (pos) \t \t \t \t .title (a.get (TAG_NAME)) \t \t \t \t \t \t \t .snippet ("Kiel is cool")), "1"); \t qualcosa è male –

+1

@ValdisAzamaris Vedi qui per soluzioni alternative usando 'Map': http://code.google.com/p/gmaps-api-issues/issues/detail?id=4650 –

2

Attualmente disponibile formalmente, lo setTag e getTag sono stati aggiunti all'API Marker.

Di seguito è stata presa dalla sezione "associate data with a marker" dal documento ufficiale:

/** 
* 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

Nota che i tag getter e setter sono disponibili solo a partire da Google Play Services 9.4.0 – Skoua

Problemi correlati