¿Cómo comprobar si un InfoWindow de Google Maps todavía se muestra antes de actualizarlo?
Comencé a trabajar en un InfoWindowAdapter que está exhibiendo imágenes de la localización dentro del InfoWindow. Tengo muchas ubicaciones diferentes, por lo tanto, es posible que una imagen de ubicación no esté disponible en el teléfono y se descargue desde la web.
Ahora, la API de Google Maps indica lo siguiente:
- Cómo agregar su aplicación a la lista "compartir este lugar" en Google maps
- Cómo agregar el logotipo en la pantalla de consentimiento de google?
- ¿Cuándo puedes llamar a GoogleMap.moveCamera después de onMapReady de OnMapReadyCallback?
- Esta aplicación IP, de sitio o móvil no está autorizada para utilizar esta clave de API.
- Android Google Maps transparencia
Tenga en cuenta que se tomará una instantánea de la vista devuelta y se procesará en el mapa para que los cambios subsiguientes en la vista no se reflejen en la ventana de información del mapa. Para actualizar la ventana de información (por ejemplo, después de cargar una imagen), simplemente llame a showInfoWindow () y la vista se actualizará.
Como entiendo esto, necesito hacer un seguimiento del marcador que creó la ventana de información que quiero actualizar y llamar a showInfoWindow una vez que se carga la imagen. Tengo un ImageDownloadService que tomará un Handler que se notifica si una imagen es carga acabada.
Si una imagen tarda un poco más en cargar, es posible que el usuario haya abierto otra InfoWindow o haya cerrado la ventana actual desplazada. El problema es que en el momento en que llamo showInfoWindow en el marcador de nuevo para actualizar la vista, no puedo estar seguro de que InfoWindow todavía se muestra.
¿Hay alguna manera de actualizar el InfoWindow sólo si todavía se muestra?
- ¿Es posible especificar el <uses-permission> mediante programación?
- Comportamiento incorrecto con zoom en Google Maps de Android
- cómo borrar todas las superposiciones de mapa o marcadores de google map en android?
- ¿Es posible eliminar los puntos de interés predeterminados de Android google map
- ¿Por qué google map v2 de repente se estrelló por java.lang.NullPointerException: Intento de obtener la longitud de matriz nula?
- Cómo obtener resultados de lugares cercanos desde la ubicación del usuario mediante la API de Google Maps en Android
- Convierta la aplicación de Android que utiliza mapas API V1 a Maps Android API V2
- ¿Cómo utilizar MapView en android usando google map V2?
Acabo de tener un problema similar con AsyncTask
s descargar y actualizar un InfoWindow
y después de mucho golpear mi cabeza contra la pared esta mañana he llegado con esta pequeña solución que esperamos que el servicio de sus necesidades hasta que Google ordenar este.
Estaba llamando a marker.showInfoWindow()
en el método OnPostExecute()
de mi AsyncTask
, que volvía a llamar los métodos InfoWindowAdapter
, que terminaba en un bucle y no propagaba mis cambios correctamente.
La solución que usé fue almacenar el marcador actualmente seleccionado y la vista de InfoWindow
que quería mostrar. He chucked en un ejemplo a continuación, donde el TextView
se está actualizando en el AsyncTask
DownloadBubbleInfo
(similar a su hilo de la imagen creo).
// Setting a custom info window adapter for the google map gMap.setInfoWindowAdapter(new InfoWindowAdapter() { // Use default InfoWindow frame public View getInfoWindow(Marker arg0) { return null; } // Defines the contents of the InfoWindow public View getInfoContents(Marker arg0) { if (selectedMarker.isInfoWindowShown()) { return infoWindowView; } else { // Getting view from the layout file info_window_layout infoWindowView = getLayoutInflater().inflate( R.layout.bubblewindowlayout, null); // Stash the base view in infoWindowView // Getting reference to the TextView to set latitude TextView tvTit = (TextView) infoWindowView .findViewById(R.id.tv_title); tvTit.setText("Fetching data..."); // Async the update so we're not slowed down waiting for // the // bubble to populate new DownloadBubbleInfo(context, infoWindowView, arg0) .execute(arg0.getTitle(), arg0.getSnippet()); // Returning the view containing InfoWindow contents return infoWindowView; } } }); gMap.setOnMarkerClickListener(new OnMarkerClickListener() { public boolean onMarkerClick(Marker marker) { // When a marker is clicked set it as the selected marker so // we can track it for the InfoWindow adapter. This will // make sure that the correct marker is still displayed when // the callback from DownloadBubbleInfo is made to // marker.showInfoWindow() which is needed to update the // InfoWindow view. selectedMarker = marker; infoWindowView = null; return false; } });
Y las líneas relevantes de la AsyncTask
DownloadBubbleInfo
:
@Override protected String[] doInBackground(String... queryparts) { // Do the query and stash the results in queryResults and pass to // onPostExecute to attach to the mainview (the current view from the // main code) and then call showInfoWindow on the marker to re-launch // the InfoWindowAdapter methods again to repopulate the InfoWindow view // and attach it. return queryResults; } protected void onPostExecute(String[] results) { ((TextView) mainview.findViewById(R.id.tv_title)).setText(results[0]); ((TextView) mainview.findViewById(R.id.tv_info)).setText(results[1]); marker.showInfoWindow(); Log.i("Chris-Debug", "Reshowing InfoWindow"); }
Ahora, todo esto debe asegurarse de que el marcador correcto se está rellenando con la información correcta devuelta de su AsyncTask
y hey presto otra esquina de la extremadamente torpe GoogleMaps v2 para Android API circunnavegó con éxito!
¿Es posible que el método boleano isInfoWindowShown () de Marker sea lo que buscas?
Marker # isInfoWindowShown () – Documentación de la API de Google Maps para Android v2
No puede ayudar cuando el InfoWindow se desplazó lejos de, sin embargo, para eso, creo, probablemente tendrá que convertir las coordenadas LatLng del marcador a coordenadas de pantalla o usar esto para comprobar si el marcador sigue en pantalla:
Cómo obtener el espacio Latitude / Longitude en Google Map V2 para Android
No estoy seguro de si es posible en absoluto para comprobar si la ventana en sí está todavía en los límites de la vista del mapa o no.
- ¿Cómo mostrar la notificación múltiple como un grupo?
- Abre la actividad A y carga un fragmento específico de la actividad A de la actividad B