2013-04-22 6 views
9

Ich arbeite an neuen Google Map v2 API.Android GoogleMap 2 aktualisieren Informationen dynamisch in InfoWindow mit ImageView über Universal Image Loader

Ich habe ImageLoader verwendet, um Bilder dynamisch auf Marker anzuzeigen.

Aber das Problem ist, wenn ich onLoadingComplete() von Universal Image Loader bekommen habe, wird das ImageView weder automatisch noch manuell ungültig gemacht.

Nächstes Mal, wenn ich auf den gleichen Marker klicke, wird das Bild vom Cache des Universal Image Loader angezeigt.

Unten ist mein CustomInfoWindowAdapter Code:

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 speichert Marker Ids in HashTable, wenn ich Marker hinzufügen. Und von ihrem werde ich die URL des Fotos erhalten.

+0

Anzeigeoptionen:

Ich habe meine Klasse, wie unten zu aktualisieren, um die Image Customized? Aufbau? Rufen Sie 'displayImage (...)' im UI-Thread auf? – NOSTRA

+0

In Render (letzte Marker-Marker, Ansicht anzeigen) habe ich imageLoader.displayImage (....) -Methode aufgerufen. –

Antwort

9

ich ein Marker-Objekt auf Klassenebene genommen und verwendet dieses Objekt die Markierung Informationen zu aktualisieren.

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

- Können Sie mehrere Karten in einer Anwendung anzeigen? –

+0

In meiner Anwendung muss ich nicht mehrere Karten anzeigen. In Map2 können jedoch mehrere Karten angezeigt werden. Demo ist in Android SDK mit Google Play Service verfügbar. –

+1

@NishantShah +1 für Ihre Antwort aber. Wenn Sie Ihre Blog-URL im Kommentar posten, wird es einfacher für das ganze Beispiel :) http://androidfreakers.blogspot.in/ Danke :) –