17

Maps V2 フラグメントのマーカーに InfoWindow を表示したいと考えています。つまり、 Universal Image Downloaderを使用して Web から動的に読み込まれる BitMaps を表示したいのです。

これは私の 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つの問題があります:

私たちが知っているように、InfoWindowが描画され、その後の変更 (私の場合は の新しいBitMapものImageView) は表示されません/ はInfoWindow更新されません。終了時に InfoWindow に再読み込みするように「通知」するにはどうすればよいimageLoaderですか? 私が置くとき

marker.showInfoWindow()

その中onLoadingCompleteに、マーカーがポップアップし、画像の読み込みを開始し、それ自体がポップアップするなどの無限ループが作成されました。

私の 2 番目の問題は、低速のネットワーク接続 (コードの 5000 ミリ秒の遅延でシミュレート) では、ImageViewそのイメージがその/InfoWindowに属しているかどうかに関係なく、最後に読み込まれたイメージが常に表示されることです。ImageWindowMarker

これを適切に実装する方法について何か提案はありますか?

4

4 に答える 4

31

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

したがって、次の3つのことを行う必要があります。

  1. モデルを作成し、すべてのダウンロードをに入れないでくださいInfoWindowAdapter
  2. からのマーカーへの参照を保存します(それを呼び出し ますmarkerShowingInfoWindow
    getInfoContents(Marker marker)
  3. モデルがダウンロード完了コールを通知したとき
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
    markerShowingInfoWindow.showInfoWindow();
}
于 2013-03-20T00:16:43.393 に答える
5

私は似たようなことをしました。これはまだ私に景気後退エラーを与えていました

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

だから私がしたことは、単にウィンドウを閉じてもう一度開くことでした

if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {

    markerShowingInfoWindow.hideInfoWindow();
    markerShowingInfoWindow.showInfoWindow();

}

同じ回答のより詳細なバージョンについては、ここに私の元の魂のリンクがあります

于 2014-03-27T14:16:39.747 に答える
1

私も同じ状況に直面し、次のコードを使用して解決しました。

私のアダプターでは、パブリック変数を追加しました

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);


    }
}

メインアクティビティに MarkerClickListener を追加しました

----

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);


}
于 2015-11-25T07:08:40.620 に答える