2013-04-22 12 views
9

Yeni Google Map v2 API üzerinde çalışıyorum.Android GoogleMap 2, Universal Image loader ile ImageView ile InfoWindow içinde dinamik olarak bilgi güncelleme

Görüntüleyiciyi dinamik olarak Marker'da görüntülemek için ImageLoader'ı kullandım.

Ancak, Universal Image Loader'da LoadLinkingComplete() yüklü olduğunda, ImageView ne otomatik olarak ne de el ile geçersiz hale getirilmiyor.

Bir dahaki sefere aynı İşaretleyiciyi tıklarsam, görüntü Evrensel Resim Yükleyicinin Önbelleği'nden görüntülenecektir.

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

ben Marker HashTable mağaza Marker Kimlikleri ekleyin:

Aşağıda benim CustomInfoWindowAdapter kodudur. Ve onların fotoğraflarının URL'sini alacağım.

+0

Ekran seçenekleri:

Ben ImageView güncellemek için aşağıdaki benim sınıf Özelleştirilmiş var? Yapılandırma? UI dizesinde 'displayImage (...)' diyor musunuz? – NOSTRA

+0

Render (son İşaret belirleyici, Görünüm görünümü), imageLoader.displayImage (....) yöntemini çağırdım. –

cevap

9

.

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

-Bir uygulamada birden fazla harita gösterebiliyor musunuz ?? –

+0

Uygulamamda, birden fazla harita göstermeye hazır değilim. Fakat Map2'de, birden fazla haritayı görüntülemek mümkündür. Demo google oyun servisi ile android sdk mevcuttur. Cevabınız için –

+1

@NishantShah +1. Eğer blog URL'sini yorum olarak gönderirseniz, tüm örnek için daha kolay olacaktır :) http://androidfreakers.blogspot.in/ teşekkürler :) –

3

Bilgi penceresinden döndürülen görünüm, geri aramalar daha sonra güncellenemez. Bu öneriye şu

Dene: Sınıf düzeyinde bir Marker nesnesi alınır ve Marker bilgilerini güncellemek için nesneyi kullanmış Dynamic contents in Maps V2 InfoWindow

İlgili konular