¿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.
- Convertir cadena en formato de fecha
- ¿Cómo leer un archivo AndroidManifest.xml (en binario)?
- Desactivar la sobrecarga agresiva en ProGuard para Android
- BitmapFactory: No se puede descodificar la secuencia: java.io.FileNotFoundException incluso cuando el archivo IS está realmente allí
- Aplicación de Android / Actividad para empezar de nuevo Completamente cada vez que empieza o se reanuda?
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?
- Android: pasar AppWidgetId a un servicio
- Gradle build falló en Android Studio 1.5.1
- Cómo crear botones como Android Google Plus App
- RuntimeException: No se pudo enviar evento @ otto
- Cambiar el color de fondo en touchevent en el diseño relativo
- Android: convertir XML estándar a formato XML binario de Android (AXML)
- ¿Puedo definir un filtro de intenciones dinámico en mi aplicación de Android?
- Tipo de letra personalizado en el título de la pestaña de ActionBar
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()); } }
- ¿Cómo hincho un menú de opciones de Android y establezco un elemento en Habilitado = falso?
- El visualizador de jerarquía de Android no muestra los tiempos para la representación