Динамическое содержимое в Maps V2 InfoWindow
я хочу показать InfoWindow на маркерах в фрагменте Maps V2. Дело в том, что я хочу показать растровые изображения, которые динамически загружаются из интернета с помощью Универсальный Загрузчик Изображений.
это мой 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 проблемы с этим:
а то знаю the InfoWindow рисуется и позже изменяется на него (в моем случае новый BitMap на ImageView) не показаны/ с InfoWindow не будучи усовершенствованный. Как я могу "уведомить" InfoWindow, чтобы перезагрузить себя, когда imageLoader закончил? Когда я ставлю
marker.showInfoWindow()
на onLoadingComplete он создал бесконечный цикл, в котором маркер появится, начнет загрузку изображения, всплывает и т. д. 
моя вторая проблема заключается в том, что при медленном сетевом подключении (имитируемом с задержкой 5000ms в коде)ImageView на InfoWindow всегда будет отображаться последнее загруженное изображение, независимо от того, принадлежит ли это изображение ImageWindow/ Marker. 
любые предложения о том, как propperly реализовать это?
4 ответов
вы должны делать Marker.showInfoWindow() на маркере, который в настоящее время показывает информационное окно при получении обновления модели.
Итак, вам нужно сделать 3 вещи:
- создать модель и не поставить все загрузки в InfoWindowAdapter
- сохранить ссылку на маркер (назовем его markerShowingInfoWindow)
 отgetInfoContents(Marker marker)
- когда модель уведомляет вас о загрузке полного вызова
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
    markerShowingInfoWindow.showInfoWindow();
}
Я сделал что-то подобное. Это все еще давало мне ошибку рецессии
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
    markerShowingInfoWindow.showInfoWindow();
}
поэтому я просто закрыл окно и открыл его снова
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
    markerShowingInfoWindow.hideInfoWindow();
    markerShowingInfoWindow.showInfoWindow();
}
для более подробной версии того же ответа вот мой оригинальный soultion ссылке
Я использовал код в этой статье, и он работал хорошо.
http://androidfreakers.blogspot.de/2013/08/display-custom-info-window-with.html
Я также столкнулся с той же ситуацией и решил, используя следующий код.
в моем адаптере я добавил общедоступную переменную
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);
}
