¿Cómo saber qué marcador se ha hecho clic en Google Maps v2 para Android?

Estoy haciendo una aplicación con un Google Maps en él, para Android. Tengo un montón de marcadores en mi pantalla y estoy preparando globo personalizable para cada marcador cuando se hace clic. Esto significa que tengo información que es diferente según el marcador al que se hizo clic.

He configurado el contenido de la vista del marcador con setInfoWindowAdapter y luego anular el método getInfoContents.

El problema es: Este método es la implementación general del contenido de la ventana de información, pero cada marcador mostrará su propia información. Por lo tanto, por lo que entiendo, tengo que de alguna manera detectar en getInfoContents (Marcador marcador) que los marcadores se han hecho clic, con el fin de la carga de mis estructuras de datos la información necesaria para presentar en la ventana de información. La pregunta es: ¿Cómo puedo identificar qué entidad representa el marcador marcado? Quiero decir, tener sólo el marcador de objeto en getInfoContents que se activó para mostrar la ventana de información, ¿cómo puedo detectar cuál es la información adecuada para mostrar? I sobre la comparación del título de la cadena usando marker.getTitle (), pero esto me obliga a mostrar un título en la ventana de información, que no quiero. También hay un marker.getId (), pero este ID es generado por la API y no puedo controlarlo

¿Algunas ideas?

En respuesta a:

La pregunta es: ¿Cómo puedo identificar qué entidad representa el marcador marcado? […] También hay un marker.getId (), pero ese ID es generado por la API y no puedo controlarlo

Usted puede controlarlo. El marcador es devuelto por addMarker (), por lo que puede obtener su ID y almacenarlo. Aquí está el código:

Map <String, Integer> mMarkers = new HashMap<String, Integer>(); 

 MarkerOptions mo = new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker)) .position(new LatLng(mLat, mLon)) .flat(true) .snippet("Click here for details") .rotation(0) .title(title); 

Cuando agrega el marcador al mapa, guarde su ID en el contenedor

 Marker mkr = map.addMarker(mo); mMarkers.put(mkr.getId(), myObject.getId()); 

Entonces, cuando se hace clic en el marcador, puede recuperar el id de "myObject" como este

 map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { public void onInfoWindowClick(Marker marker) { int id = mMarkers.get(marker.getId()); // Do stuff with the id } }); 

No está obligado a mostrar el título cuando lo tiene establecido, por lo que puede utilizar eso y siempre y cuando devuelva una View de getInfoContents y no setText en cualquier subvista de que se devuelve View con el valor del título.

Dependiendo de cómo y si ya mantiene referencias a todos los marcadores, existen alternativas, por ejemplo, si usted tenía List<Marker> policeMarkers y List<Marker> badGuysMarkers puede usar un condicional if (policeMarkers.contains(marker)) { ... } else { ... } .

También puede mantener un Map<Marker, YourMarkerRelatedDataModel> allMarkers y hacer YourMarkerRelatedDataModel model = allMarkers.get(marker); Y utilizar ese valor para diferenciar.

Por último, puede utilizar Android Maps Extensions , que agrega funciones como Marker.setData(Object) y Object Marker.getData() para mantener su modelo cerca de sus marcadores y no crear cosas como Map<Marker, Model> .

Prueba este código:

 @Override public void onInfoWindowClick(final Marker marker) { // TODO Auto-generated method stub if (marker.getTitle().equalsIgnoreCase("Start")) { Toast.makeText(showMaps.this, "You have click on start -->", Toast.LENGTH_LONG).show(); Log.e("marker.getPosition()-->", "" + marker.getPosition()); } } 
  • Base 64 codificar y descodificar código de ejemplo
  • División de XML en varios archivos xml
  • Cómo detectar si es el botón Recents, el modo Multi Window o el botón home onUserLeaveHint ()
  • Cómo enviar el archivo binario y el texto usando el mismo socket
  • Programaticamente encuentre imágenes trémulas o fuera de foco
  • Actualizar Android TextView
  • Android.database.CursorIndexOutOfBoundsException
  • Android WebView - con proxy autenticado
  • ¿Cómo puedo utilizar estilos html en cadenas con argumentos de formato?
  • Adaptador personalizado que no muestra ningún dato en ListView
  • Después de un fallo en el suministro de energía, ya no puedo compilar la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.