2013-04-22 8 views
9

Pracuję nad nowym API Google Map v2.Android GoogleMap 2 aktualizuje informacje dynamicznie w InfoWindow z ImageView poprzez Universal Image loader

Użyłem ImageLoader do dynamicznego wyświetlania obrazów w Markerze.

Ale problem jest, gdy mam OnLoadingComplete() Universal Image Loader, ImageView nie jest unieważniany ani automatycznie ani ręcznie.

Następnym razem, gdy kliknę na ten sam znacznik, obraz zostanie wyświetlony z pamięci podręcznej programu Universal Image Loader.

Poniżej jest moje CustomInfoWindowAdapter kod:

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(""); 
     } 
    } 
} 

ja sklepach Marker IDS w HashTable kiedy dodać znacznik. I od nich otrzymam adres URL zdjęcia.

+0

opcji Pokaż? Konfiguracja? Czy nazywasz 'displayImage (...)' na wątku UI? – NOSTRA

+0

W renderowaniu (końcowy znacznik znacznika, widok widoku) nazwałem metodę imageLoader.displayImage (....). –

Odpowiedz

9

Wziąłem jeden obiekt znacznik na poziomie klasy i używane tego obiektu, aby zaktualizować informacje znacznik.

ja dostosował moją klasę jak poniżej w celu zaktualizowania 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; 
    } 
} 

Check the Example

+0

- Czy możesz wyświetlić wiele map w jednej aplikacji? –

+0

W mojej aplikacji nie chcę pokazywać wielu map. Ale w Map2 możliwe jest wyświetlanie wielu map. Demo jest dostępne w usłudze Android SDK z usługą Google Play. –

+1

@NishantShah +1 za odpowiedź, ale. jeśli zamieścisz swój blog w komentarzu, łatwiej będzie dla całego przykładu :) http://androidfreakers.blogspot.in/ thanks :) –