¿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.
- Acceso al dominio desde un subproceso incorrecto Android
- Android AsyncTaskLoader no inicia loadInBackground?
- Cómo crear una devolución de llamada (agregar como argumento dinámico, una función)?
- Convención de paquetes Java
- LRUCache reordenación de entrada al usar get
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?
- Cadena de EditText a float
- Agregar JsonArray a JsonObject generó caracteres de escape (gson)
- Focus Lost animación en Android / Ice Cream Sandwich
- Llamar a un método java desde c ++ en Android
- Android.database.sqlite.SQLiteException: no hay tal columna
- RxJava y Sqlbrite - qué operador utilizar
- Integración multimedia con LibGDX
- ¿Cómo eliminar el certificado instalado por el usuario mediante programación?
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