2016-04-30 1 views
1

Я сохранил am Object для HashMap, называемого Memories, который я хочу вытащить BitMap и Title и т. Д. И установить его в Markers InfoWindow, когда я нажимаю на него. У меня есть InfoWindow с изображением и заголовками и т. Д., Но когда я добавляю еще один маркер и создаю еще один объект Memories. Оба маркера показывают новейшие данные.Невозможно показать индивидуальную маркерную информацию от HashMap

@Override 
public void showMemory(final Memory memory) { 
    Toast.makeText(getApplicationContext(), "The Minions have saved your Memory!", Toast.LENGTH_SHORT).show(); 
    mMap.addMarker(new MarkerOptions().title(memory.getTitleMem()).position(memory.getLocationMem())); 

    mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
     @Override 
     public View getInfoWindow(Marker marker) { 
      return null; 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 
      markers.put(marker.getId(), memory); 
      View view = getLayoutInflater().inflate(R.layout.marker_layout, null); 

      ImageView markerImage = (ImageView)view.findViewById(R.id.markerImage); 
      TextView markerTitle = (TextView)view.findViewById(R.id.markerTitle); 
      TextView markerDate = (TextView)view.findViewById(R.id.markerDate); 

      if(markers != null && markers.size() > 0){ 
       markerImage.setImageBitmap(markers.get(marker.getId()).getImageMem()); 
       markerTitle.setText(markers.get(marker.getId()).getTitleMem()); 
       markerDate.setText(markers.get(marker.getId()).getFormatedDate()); 
      } 



      return view; 
     } 
    }); 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(memory.getLocationMem())); 
} 

Здесь я сохраняю свой объект в HashMap и показываю содержимое маркера. Я сохраняю и показываю данные неправильно в маркере?

ответ

1

Ваша попытка использовать final не будет давать вам то, что вы хотите,

Адаптер InfoWindow вызывается для каждого выдающегося маркера. Это то, что вы настраиваете на GoogleMap, а не на отдельном Marker. Это означает, что getInfoContents() вызывается для каждого выдающегося Marker, в результате чего вы обновляете каждые Marker данные с теми же Memory.

Чтобы это исправить:

Шаг 1: Переместить markers.put(marker.getId(), memory); из getInfoContents() и непосредственно в showMemory(). Ваш вызов addMarker() возвращает Marker, который вы можете использовать для звонка getId().

Шаг № 2: Позвоните только setInfoWindowAdapter() один раз за GoogleMap.

+0

Спасибо за быстрый ответ! Я сейчас дам этот выстрел :) – SmiffyKmc

+0

Работал как шарм! Также спасибо за то, что научили меня больше об этом. Очень признателен! – SmiffyKmc