Android GoogleMap 2 actualiza la información de forma dinámica en InfoWindow con ImageView a través de Universal Image loader
Estoy trabajando en la nueva API de Google Map v2.
He utilizado ImageLoader para mostrar imágenes dinámicamente en Marcador.
- Mostrar imágenes desde la carpeta Desplegable con Universal Image Loader
- Imagen de Android - Volley vs Picasso
- Error de falta de memoria con el cargador de imágenes universal y las imágenes se actualizan
- ¿Cómo configurar descargador personalizado en Universal Image Loader?
- Problema de zoom de imagen con Universal Image Loader y View Pager
Pero el problema es cuando tengo onLoadingComplete () de Universal Image Loader, el ImageView no se invalida ni automáticamente ni manualmente.
La próxima vez que haga clic en el mismo marcador, la imagen se mostrará desde el caché de Universal Image Loader.
A continuación se muestra mi código CustomInfoWindowAdapter :
private class CustomInfoWindowAdapter implements InfoWindowAdapter { @Override public View getInfoContents(Marker marker) { return null; } @Override public View getInfoWindow(Marker marker) { final View mWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null); render(marker, mWindow); return mWindow; } private void render(final Marker marker, View view) { final String url = markers.get(marker.getId()).getStrProfilePic(); final ImageView image = ((ImageView) view.findViewById(R.id.badge)); Log.e(TAG, "URL : " + url); if ( url != null && !url.equalsIgnoreCase("null") && !url.equalsIgnoreCase("")) { imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); ((ImageView) view).invalidate(); } }); } else { image.setImageResource(R.drawable.noimage); } final String title = marker.getTitle(); final TextView titleUi = ((TextView) view.findViewById(R.id.title)); if (title != null) { titleUi.setText(title); } else { titleUi.setText(""); } final String snippet = marker.getSnippet(); final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); if (snippet != null) { snippetUi.setText(snippet); } else { snippetUi.setText(""); } } }
I almacena los identificadores de marcador en HashTable cuando agrego Marcador. Y de su voy a obtener la URL de la foto.
- Cargador de imágenes universal no funciona
- Método de llamada en la subclase de imageLoader
- ImageLoader - No descargues la imagen si ya está en caché
- FragmentStatePagerAdapter OutOfMemoryError
- No se pudo encontrar la clase después de la actualización de android sdk 22
- Cargador de imágenes universal: limpie el caché manualmente
- Se cancelan las solicitudes de Universal Image Loader de Android con la misma URL
- ImageView no estira la imagen correctamente
He tomado un objeto marcador en el nivel de clase y he utilizado ese objeto para actualizar la información del marcador.
He modificado mi clase para requisitos particulares para actualizar el ImageView:
private class CustomInfoWindowAdapter implements InfoWindowAdapter { private View view; public CustomInfoWindowAdapter() { view = getLayoutInflater().inflate(R.layout.custom_info_window, null); } @Override public View getInfoContents(Marker marker) { if ( YourClassName.this.marker != null && ClassName.this.marker.isInfoWindowShown() ) { YourClassName.this.marker.hideInfoWindow(); YourClassName.this.marker.showInfoWindow(); } return null; } @Override public View getInfoWindow(final Marker marker) { YourClassName.this.marker = marker; final String url = markers.get(marker.getId()).getStrProfilePic(); final ImageView image = ((ImageView) view.findViewById(R.id.badge)); if ( url != null && !url.equalsIgnoreCase("null") && !url.equalsIgnoreCase("")) { imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); getInfoContents(marker); } }); } else { image.setImageResource(R.drawable.noimage); } final String title = marker.getTitle(); final TextView titleUi = ((TextView) view.findViewById(R.id.title)); if (title != null) { titleUi.setText(title); } else { titleUi.setText(""); } final String snippet = marker.getSnippet(); final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); if (snippet != null) { snippetUi.setText(snippet); } else { snippetUi.setText(""); } return view; } }
Revise el Ejemplo
La vista devuelta de las devoluciones de llamada de la ventana de información no se puede actualizar posteriormente.
Intente seguir esta sugerencia: Contenido dinámico en Maps V2 InfoWindow
- Estoy recibiendo una excepción de objeto de base de datos no cerrada en SQLite (Android), pero estoy cerrando explícitamente mi base de datos … ¿Ayuda?
- Android: asignar un valor constante a un elemento xml