2013-03-19 11 views
15

Map V2フラグメントのマーカーにInfoWindowを表示したいとします。 これは、ウェブから動的にロードされるビットマップをUniversal Image Downloaderで表示したいのです。Maps V2 InfoWindowの動的コンテンツ

これは私のInfoWindowAdapterです:

class MyInfoWindowAdapter implements InfoWindowAdapter { 

    private final View v; 

    MyInfoWindowAdapter() { 
     v = getLayoutInflater().inflate(R.layout.infowindow_map, 
       null); 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 



     Item i = items.get(marker.getId()); 

     TextView tv1 = (TextView) v.findViewById(R.id.textView1); 
     ImageView iv = (ImageView) v.findViewById(R.id.imageView1); 
     tv1.setText(i.getTitle()); 


     DisplayImageOptions options = new DisplayImageOptions.Builder() 
       .delayBeforeLoading(5000).build(); 

     imageLoader.getMemoryCache(); 

     imageLoader.displayImage(i.getThumbnailUrl(), iv, options, 
       new ImageLoadingListener() { 

        @Override 
        public void onLoadingStarted(String imageUri, View view) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onLoadingFailed(String imageUri, View view, 
          FailReason failReason) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onLoadingComplete(String imageUri, 
          View view, Bitmap loadedImage) { 
         Log.d("MAP", "Image loaded " + imageUri); 

        } 

        @Override 
        public void onLoadingCancelled(String imageUri, 
          View view) { 
         // TODO Auto-generated method stub 

        } 
    }); 

     return v; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

私はこれで2つの問題を抱えて:私たちはInfoWindowknowとして

が描かれ、(私の場合ImageViewに新しいBitMapで)それを後から変更されますが表示されない/ InfoWindowは更新されていません。 imageLoaderが終了したときにInfoWindowにリロードするよう通知するにはどうすればよいですか?私はonLoadingComplete

marker.showInfoWindow() 

を入れたときには、などのマーカーは、ポップアップ表示画像のロードを開始、自分自身をポップアップ表示されます無限ループを作成し

私の第二の問題は、低速なネットワーク接続上の(シミュレートしていることですコード内で5000msの遅延がある場合)InfoWindowImageViewには、最後にロードされた画像が表示されます(その画像がImageWindow/Markerの場合)。

これを徹底的に実装する方法に関する提案はありますか?

答えて

31

モデルの更新を受け取った時点で、現在情報ウィンドウを表示しているマーカーでMarker.showInfoWindow()を実行する必要があります。 getInfoContents(Marker marker)

  • ときに、モデルの通知からマーカーへの参照保存InfoWindowAdapter
  • にすべてのダウンロードを入れたモデルを作成していない

    1. markerShowingInfoWindowそれを呼び出す)

      だから、あなたは3つの事を行う必要がありますあなたは完全な電話をダウンロードします。

    if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) { 
        markerShowingInfoWindow.showInfoWindow(); 
    } 
    
  • +1

    をMarkerClickListenerを追加した私のアダプタで

    は、誰もがコードを入れてくださいことはできますか? –

    +0

    ここにコードを入れてください.....ありがとう – sonida

    +17

    プログラミングはコピー・ペースト操作についてではありません。私の答えは従いやすいべきであり、そうでなければ質問をして物を明確にするかもしれない。 –

    3

    私は似た何かをしました。 これはまだそれでは、私は単にウィンドウを閉じ、ここで同じ答えのより良い詳細版のために再び

    if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) { 
    
        markerShowingInfoWindow.hideInfoWindow(); 
        markerShowingInfoWindow.showInfoWindow(); 
    
    } 
    

    それを開いていたなかったことは私のオリジナルsoultionある

    if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) { 
        markerShowingInfoWindow.showInfoWindow(); 
    } 
    

    私の不況のエラーを与えていましたLINK

    +0

    これは、受け入れられた回答のコメントによく似ています。これを本当に行う必要がある場合は、Google Maps Android API v2のバグのようです。私はこのバグに遭遇したことはありませんし、隠しを使用せずに問題がなかった... –

    +0

    単に呼び出して.showInfoWindow再び私のために働いた!アイデアありがとう – Denny

    0

    私も同じ状況に直面し、次のコードを使用して解決しました。誰もが問題を解決した場合、私はパブリック変数に

    public class MarkerInfoWindowAdapter implements GoogleMap.InfoWindowAdapter { 
    
        public String ShopName=""; 
    
        ------- 
        ------- 
    
        @Override 
        public View getInfoWindow(Marker arg0) { 
    
         View v; 
         v = mInflater.inflate(R.layout.info_window, null); 
    
         TextView shop= (TextView) v.findViewById(R.id.tv_shop); 
    
         shop.setText(ShopName); 
    
    
        } 
    } 
    

    を追加し、私のメインの活動に

    ---- 
    
    MarkerInfoWindowAdapter mMarkerInfoWindowAdapter; 
    
    ---- 
    ---- 
    
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
    
    
        mMarkerInfoWindowAdapter = new MarkerInfoWindowAdapter(getApplicationContext()); 
    
    
    
        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    
         @Override 
         public boolean onMarkerClick(final Marker arg0) { 
    
          mMarkerInfoWindowAdapter.ShopName= "my dynamic text"; 
    
          arg0.showInfoWindow(); 
    
          return true; 
         } 
        } 
    
        mMap.setInfoWindowAdapter(mMarkerInfoWindowAdapter); 
    
    
    } 
    
    関連する問題